C# 使用匹配的大括号拆分字符串的最佳方法
我现在在C#中工作,使用JSON.Net将JSON字符串解析为C#对象。我的部分问题是我得到了如下字符串:C# 使用匹配的大括号拆分字符串的最佳方法,c#,json,json.net,C#,Json,Json.net,我现在在C#中工作,使用JSON.Net将JSON字符串解析为C#对象。我的部分问题是我得到了如下字符串: {"name": "John"}{"name": "Joe"} class Person { public string Name { get; set; } } string json = @"{""name"": ""John""}{""name"": ""Joe""}"; using (StringReader sr = new StringReader(json))
{"name": "John"}{"name": "Joe"}
class Person
{
public string Name { get; set; }
}
string json = @"{""name"": ""John""}{""name"": ""Joe""}";
using (StringReader sr = new StringReader(json))
using (JsonTextReader reader = new JsonTextReader(sr))
{
reader.SupportMultipleContent = true;
var serializer = new JsonSerializer();
while (reader.Read())
{
if (reader.TokenType == JsonToken.StartObject)
{
Person p = serializer.Deserialize<Person>(reader);
Console.WriteLine(p.Name);
}
}
}
当我尝试使用JsonConvert.DeserializeObject
反序列化时,它会抛出一个异常
我想知道将这个较大的字符串拆分为较小的json字符串的最佳方法是什么
我在考虑穿过字符串,匹配“0级”的花括号。这是个好主意吗?或者有更好的方法吗?我发现最好的方法是将字符串转换为数组结构:
string json = "{\"name\": \"John\"}{\"name\": \"Joe\"}";
json = json.Insert(json.Length, "]").Insert(0, "[").Replace("}{", "},{");
// json now is [{"name": "John"},{"name": "Joe"}]
List<Person> result = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Person>>(json);
您可以使用
JsonTextReader
并将SupportMultipleContent
标志设置为true来读取此非标准JSON。假设您有一个类Person
,看起来像这样:
{"name": "John"}{"name": "Joe"}
class Person
{
public string Name { get; set; }
}
string json = @"{""name"": ""John""}{""name"": ""Joe""}";
using (StringReader sr = new StringReader(json))
using (JsonTextReader reader = new JsonTextReader(sr))
{
reader.SupportMultipleContent = true;
var serializer = new JsonSerializer();
while (reader.Read())
{
if (reader.TokenType == JsonToken.StartObject)
{
Person p = serializer.Deserialize<Person>(reader);
Console.WriteLine(p.Name);
}
}
}
您可以按如下方式反序列化JSON对象:
{"name": "John"}{"name": "Joe"}
class Person
{
public string Name { get; set; }
}
string json = @"{""name"": ""John""}{""name"": ""Joe""}";
using (StringReader sr = new StringReader(json))
using (JsonTextReader reader = new JsonTextReader(sr))
{
reader.SupportMultipleContent = true;
var serializer = new JsonSerializer();
while (reader.Read())
{
if (reader.TokenType == JsonToken.StartObject)
{
Person p = serializer.Deserialize<Person>(reader);
Console.WriteLine(p.Name);
}
}
}
stringjson=@“{”“name”“:”“John”“}{”“name”“:”“Joe”“}”;
使用(StringReader sr=new StringReader(json))
使用(JsonTextReader reader=newjsontextreader(sr))
{
reader.SupportMultipleContent=true;
var serializer=new JsonSerializer();
while(reader.Read())
{
if(reader.TokenType==JsonToken.StartObject)
{
Person p=序列化程序。反序列化(读取器);
Console.WriteLine(p.Name);
}
}
}
Fiddle:这个json是从哪里来的?它们是我在做的一个练习中给我的一些测试用例。它不是有效的json,但可以做一些小改动[{“name”:“John”},{“name”:“Joe”}]嗯,我提供的示例是在有一个大括号的时候提供的。“如果有两个或三个级别,这行得通吗?”本杰明·波斯特(Benjamin post)是你能得到的最复杂的例子,我非常乐意尝试一下:)