首頁 >後端開發 >C++ >如何在 C# 中序列化和反序列化行分隔 JSON (LDJSON)?

如何在 C# 中序列化和反序列化行分隔 JSON (LDJSON)?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-22 16:35:10852瀏覽

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資料的方法。透過將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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn