[C#] 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;}
}



답변

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);
}

설명서 : JSON을 파일로 직렬화


왜? 다음 은 일반적인 직렬 변환기와 벤치 마크 테스트 † ‡ 의 기능 비교 입니다.

아래는 링크 된 기사에서 얻은 성능 그래프입니다.

여기에 이미지 설명을 입력하십시오

별도의 게시물은 다음 과 같이 말합니다.

Json.NET은 항상 메모리 효율성이 뛰어나서 큰 문서를 메모리에 완전히로드하지 않고 읽기 및 쓰기를 스트리밍하지만 객체 할당을 줄일 수있는 몇 가지 주요 위치를 찾을 수있었습니다 …… (현재) Json.Net (6.0) JavaScriptSerializer 이상 할당 8 배 적은 메모리


.Net Core 3.0 이후 업데이트

이 글을 쓴 후 새로운 아이 System.Text.Json가 .Net Core 3.0에 추가되었습니다. Microsoft는 이것이 Newtonsoft보다 나은 점에 대해 몇 가지 주장을합니다 . 그것을 포함하면 Newtonsoft보다 빠릅니다 . 위와 같이, 나는이 자신을 테스트하기 위해 조언을 줄 .

† 벤치 마크는 Json.Net 5로, 현재 버전 (작성 중)은 10입니다. 사용 된 표준 .Net 직렬 변환기 버전은 언급되지 않았습니다.

이 테스트는 분명히 라이브러리를 유지 관리하는 개발자가 수행 한 것입니다. 나는 그들의 주장을 확인하지 않았다 . 의심스러운 경우 직접 테스트하십시오.


답변

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);


답변