Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用匹配的大括号拆分字符串的最佳方法_C#_Json_Json.net - Fatal编程技术网

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))

我现在在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))
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)是你能得到的最复杂的例子,我非常乐意尝试一下:)