行定界的json序列化和反序列化

我正在使用JSON.NET和C#5。我需要将对象列表序列化/反序列化为行分隔的json。http://en.wikipedia.org/wiki/Line_Delimited_JSON。例,

{"some":"thing1"}

{"some":"thing2"}

{"some":"thing3"}

{"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}]}

为什么需要我,因为其Google BigQuery要求https://cloud.google.com/bigquery/preparing-data-

for-bigquery

我发现的一种方法是分别序列化每个对象,并以换行符结尾。

回答:

您可以通过使用手动解析JSON JsonTextReader并将其SupportMultipleContent标志设置为来实现true

如果我们看您的第一个示例,并创建一个名为的POCO Foo

public class Foo

{

[JsonProperty("some")]

public string Some { get; set; }

}

这是我们解析它的方式:

var json = "{\"some\":\"thing1\"}\r\n{\"some\":\"thing2\"}\r\n{\"some\":\"thing3\"}";

var jsonReader = new JsonTextReader(new StringReader(json))

{

SupportMultipleContent = true // This is important!

};

var jsonSerializer = new JsonSerializer();

while (jsonReader.Read())

{

Foo foo = jsonSerializer.Deserialize<Foo>(jsonReader);

}

如果要作为结果的项目列表,只需将每个项目添加到列表while循环中的列表中即可。

listOfFoo.Add(jsonSerializer.Deserialize<Foo>(jsonReader));

注意:在Json.Net

10.0.4及更高版本中,相同的代码也支持逗号分隔的JSON条目,请参阅如何反序列化狡猾的JSON(带有不正确的引号的字符串和缺少的括号)?)

以上是 行定界的json序列化和反序列化 的全部内容, 来源链接: utcz.com/qa/398727.html

回到顶部