首页 >后端开发 >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数据的方法。通过将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