C#에 JSON 파일을 쓰는 방법
다음 데이터를 C#에 JSON 포맷으로 텍스트 파일로 작성해야 합니다.각 괄호는 유효한 JSON 형식이어야 합니다.
[
{
"Id": 1,
"SSN": 123,
"Message": "whatever"
},
{
"Id": 2,
"SSN": 125,
"Message": "whatever"
}
]
모델 클래스는 다음과 같습니다.
public class data
{
public int Id { get; set; }
public int SSN { get; set; }
public string Message { get; set;}
}
업데이트 2020:제가 이 답을 쓴 지 7년 됐어요.여전히 많은 관심을 받고 있는 것 같아요.2013년 뉴턴소프트 Json.넷이 이 문제에 대한 해답이었다.현재도 이 문제에 대한 좋은 해답이지만 더 이상 유일한 실행 가능한 옵션은 아닙니다.이 답변에 몇 가지 최신 경고를 추가하려면 다음 절차를 따릅니다.
- .NET Core는 이제 섬뜩할 정도로 비슷한 기능을 가지고 있습니다.
System.Text.Json시리얼라이저(아래 참조) - 의 시대는 다행히 지나갔고 이 수업은 에도 없습니다.NET 코어이것은 뉴턴소프트가 실행한 많은 비교를 무효화한다.
- 또한 최근 Json에서 사용하는 취약성 검사 소프트웨어를 통해 알게 되었습니다.Net은 한동안 업데이트를 받지 못했습니다.2020년 업데이트는 고갈되었으며 최신 버전인 12.0.3은 1년이 넘었습니다(2021년).
- 속도 테스트(이전에는 아래에 인용되었지만 너무 오래되어 현재는 제거됨)는 Json의 이전 버전을 비교하고 있습니다.Net(버전 6.0 및 앞서 말한 바와 같이 최신 버전은 12.0.3)이 오래된 것입니다.Net Framework 시리얼라이저
- 장점 중 하나는
System.Text.Json시리얼라이저는 뉴턴소프트를 능가합니다.async/await
Are Json입니다.넷의 날이 얼마 남지 않았나요?여전히 많이 사용되고 있고 MS 라이브러리에서 여전히 사용되고 있습니다.아마 아닐 거예요.하지만 이것은 이 라이브러리의 종말의 시작처럼 느껴집니다. 이 라이브러리는 거의 그대로 운영될지도 모릅니다.
.NET Core 3.0+ 및넷 5 이상
이 글을 쓴 이후 블록에 새로 들어온 아이가 에 추가되었습니다.넷코어 3.0마이크로소프트는 이것이 뉴턴소프트보다 얼마나 나은지에 대해 몇 가지 주장을 하고 있다.그것이 뉴턴소프트보다 빠르다는 것을 포함해서.직접 테스트해 보시길 권합니다.
예:
using System.Text.Json;
using System.Text.Json.Serialization;
List<data> _data = new List<data>();
_data.Add(new data()
{
Id = 1,
SSN = 2,
Message = "A Message"
});
string json = JsonSerializer.Serialize(_data);
File.WriteAllText(@"D:\path.json", json);
또는
using System.Text.Json;
using System.Text.Json.Serialization;
List<data> _data = new List<data>();
_data.Add(new data()
{
Id = 1,
SSN = 2,
Message = "A Message"
});
await using FileStream createStream = File.Create(@"D:\path.json");
await JsonSerializer.SerializeAsync(createStream, _data);
뉴턴소프트 존슨.Net(.Net 프레임워크 및).넷코어)
또 다른 옵션은 Json입니다.Net, 이하 예를 참조해 주세요.
List<data> _data = new List<data>();
_data.Add(new data()
{
Id = 1,
SSN = 2,
Message = "A Message"
});
string json = JsonConvert.SerializeObject(_data.ToArray());
//write string to file
System.IO.File.WriteAllText(@"D:\path.txt", json);
또는 위의 코드의 조금 더 효율적인 버전(스트링을 버퍼로 사용하지 않음):
//open file stream
using (StreamWriter file = File.CreateText(@"D:\path.txt"))
{
JsonSerializer serializer = new JsonSerializer();
//serialize object directly into file stream
serializer.Serialize(file, _data);
}
Liam의 답변 예제는 파일을 한 줄에 문자열로 저장합니다.저는 포맷을 추가하는 것을 선호합니다.향후 다른 사용자가 파일의 일부 값을 수동으로 변경할 수 있습니다.포맷을 추가하면 포맷이 더 쉬워집니다.
다음은 기본 JSON 들여쓰기를 추가합니다.
string json = JsonConvert.SerializeObject(_data.ToArray(), Formatting.Indented);
JavaScriptSerializer 클래스를 사용하는 기능이 내장되어 있습니다.
var json = JavaScriptSerializer.Serialize(data);
var responseData = //Fetch Data
string jsonData = JsonConvert.SerializeObject(responseData, Formatting.None);
System.IO.File.WriteAllText(Server.MapPath("~/JsonData/jsondata.txt"), jsonData);
언급URL : https://stackoverflow.com/questions/16921652/how-to-write-a-json-file-in-c
'source' 카테고리의 다른 글
| woocommerce_order_status_inters가 트리거되지 않았습니다. (0) | 2023.02.07 |
|---|---|
| 여러 콘텐츠 관리 시스템을 학습하는 데 따른 비용 및 이점 (0) | 2023.02.07 |
| Uncaught TypeError: null wp-embed.min.js의 속성 'secret'을 읽을 수 없습니다. (0) | 2023.02.07 |
| 관련성별로 워드프레스 검색 정렬 (0) | 2023.02.07 |
| 커스텀 투고가 저장 또는 갱신될 때마다 트리거되는 WordPress에서 사용할 수 있는 액션은 무엇입니까? (0) | 2023.02.07 |