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