>백엔드 개발 >C++ >C#에서 줄로 구분된 JSON(LDJSON)을 직렬화 및 역직렬화하는 방법은 무엇입니까?

C#에서 줄로 구분된 JSON(LDJSON)을 직렬화 및 역직렬화하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-22 16:35:10799검색

How to Serialize and Deserialize Line Delimited JSON (LDJSON) in C#?

C#에서 줄로 구분된 JSON(LDJSON) 직렬화 및 역직렬화

객체를 행으로 구분된 JSON(LDJSON) 형식(Google BigQuery 데이터 준비에 일반적으로 사용됨)으로 직렬화 및 역직렬화해야 하는 경우 이 프로세스를 이해하는 것이 중요합니다. LDJSON은 데이터를 줄 바꿈으로 구분된 일련의 JSON 개체로 나타냅니다.

LDJSON 데이터 수동 구문 분석

Json.NET의 JsonTextReader는 LDJSON 데이터를 수동으로 구문 분석하는 방법을 제공합니다. JsonTextReader는 SupportMultipleContent 플래그를 true로 설정하여 연속 JSON 개체를 처리할 수 있습니다.

첫 번째 JSON 예(단순 객체)

다음 LDJSON 데이터를 고려하세요.

<code>{"some":"thing1"}
{"some":"thing2"}
{"some":"thing3"}</code>

분석 방법은 다음과 같습니다.

<code class="language-csharp">var json = "{\"some\":\"thing1\"}\r\n{\"some\":\"thing2\"}\r\n{\"some\":\"thing3\"}";
var jsonReader = new JsonTextReader(new StringReader(json))
{
    SupportMultipleContent = true // 允许多个JSON对象
};

var jsonSerializer = new JsonSerializer();
while (jsonReader.Read())
{
    var foo = jsonSerializer.Deserialize<foo>(jsonReader);
}</code>

두 번째 JSON 예(중첩 객체)

더 복잡한 JSON:

<code class="language-json">{"kind": "person", "fullName": "John Doe", "age": 22, "gender": "Male", "citiesLived": [{ "place": "Seattle", "numberOfYears": 5}, {"place": "Stockholm", "numberOfYears": 6}]}
{"kind": "person", "fullName": "Jane Austen", "age": 24, "gender": "Female", "citiesLived": [{"place": "Los Angeles", "numberOfYears": 2}, {"place": "Tokyo", "numberOfYears": 2}]}</code>

동일한 접근 방식을 사용하여 역직렬화된 각 개체를 목록에 추가합니다.

<code class="language-csharp">var json = "{...}"; // 定义JSON字符串
var jsonReader = new JsonTextReader(new StringReader(json)) { SupportMultipleContent = true };
var jsonSerializer = new JsonSerializer();
var listOfPeople = new List<person>();

while (jsonReader.Read())
{
    listOfPeople.Add(jsonSerializer.Deserialize<person>(jsonReader));
}</code>

참고: Json.Net 10.0.4 이상에서는 쉼표로 구분된 JSON 항목도 지원하여 추가적인 유연성을 제공합니다.

위 내용은 C#에서 줄로 구분된 JSON(LDJSON)을 직렬화 및 역직렬화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.