C#中行分隔JSON (LDJSON)的序列化與反序列化
在需要將物件序列化和反序列化為行分隔JSON (LDJSON) 格式時(Google BigQuery資料準備中常用),理解這個過程至關重要。 LDJSON將資料表示為一系列以換行符號分隔的JSON物件。
手動解析LDJSON資料
Json.NET中的JsonTextReader提供了一種手動解析LDJSON資料的方法。透過將SupportMultipleContent標誌設為true,JsonTextReader可以處理連續的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中文網其他相關文章!