行分隔的 json 序列化和反序列化

2024-03-04

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

{"some":"thing1"}
{"some":"thing2"}
{"some":"thing3"}

and

{"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 https://cloud.google.com/bigquery/preparing-data-for-bigquery

Update:我发现的一种方法是单独序列化每个对象并在最后用换行符连接。


您可以通过使用以下命令手动解析 JSON 来完成此操作JsonTextReader并设置SupportMultipleContent标记为true.

如果我们看一下您的第一个示例,并创建一个名为的 POCOFoo:

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(带有不正确引用的字符串,并且缺少括号)? https://stackoverflow.com/questions/46788778/how-to-deserialize-dodgy-json-with-improperly-quoted-strings-and-missing-brack)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

行分隔的 json 序列化和反序列化 的相关文章

随机推荐