source

C#에 JSON 파일을 쓰는 방법

itover 2023. 2. 7. 19:46
반응형

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

문서:JSON을 파일에 직렬화하다

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

반응형