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中文网其他相关文章!