将包含Jarray对象列表的字符串转换为JSONin C#

将包含Jarray对象列表的字符串转换为JSONin C#,c#,json,json.net,C#,Json,Json.net,我有一个JSON字符串,比如 string str = [{"a":"b"},{"c":"d"}], 我用下面的代码把它转换成Jarray JArray obj=JArray.Parse(str); 工作正常,但我的输入字符串已更改为 str=[{"a":"b"},{"c":"d"}],[{"e":"f"},{"g":"h"}] 现在JArray解析抛出了一个错误,因为它是一个JArray列表,如何在C#?中解析上述字符串我能够找到一种方法来解析以下字符串,使用: [{“a”:“b”}、{

我有一个JSON字符串,比如

string str = [{"a":"b"},{"c":"d"}],
我用下面的代码把它转换成Jarray

JArray obj=JArray.Parse(str);
工作正常,但我的输入字符串已更改为

str=[{"a":"b"},{"c":"d"}],[{"e":"f"},{"g":"h"}]

现在JArray解析抛出了一个错误,因为它是一个JArray列表,如何在C#?

中解析上述字符串我能够找到一种方法来解析以下字符串,使用:

[{“a”:“b”}、{“c”:“d”}、{“e”:“f”}、{“g”:“h”}]

感谢@dbc为我指明了正确的方向(请参阅)。 请注意,此功能仅在Json.NET的11.0.1版中可用

以下方法使用
JsonTextReader
并返回
IEnumerable

私有静态IEnumerable ParseKeyValuePairs(字符串json)
{
使用(var reader=newstringreader(json))
使用(var jsonReader=newjsontextreader(reader){SupportMultipleContent=true})
{
JsonSerializer serializer=JsonSerializer.CreateDefault();
while(jsonReader.Read())
{
if(jsonReader.TokenType==JsonToken.Comment)
{
持续
}
var dictionaries=serializer.Deserialize(jsonReader);
foreach(KeyValuePair字典中的keyValue。选择many(x=>x))
{
收益返回键值;
}
}
}
}
使用代码生成
词典

stringjson=@“[{”a”“:“b”“},{”c”“:“d”“}],{”e”“:“f”“},{”g”“:“h”“}];
字典数据=ParseKeyValuePairs(json).ToDictionary(x=>x.Key,x=>x.Value);
结果:


扔什么?实际代码是什么,实际字符串是什么
string str=[{“a”:“b”},{“c”:“d”}],
既不是有效的c#也不是有效的JSON,绝对不是JSON数组。如果字符串包含有效数组,JSON.NET将毫无问题地对其进行解析。您的最后一个字符串不是有效的JSON字符串,您可以在OK中验证它,这是无效的JSON。JSON字符串中不能有多个根元素:
[{“a”:“b”}、{“c”:“d”}、{“e”:“f”}、{“g”:“h”}]
。这是两个独立的JSON片段。一个或多个数组将用方括号括起来,即
[[{“a”:“b”}、{“c”:“d”}、{“e”:“f”}、{“g”:“h”}]
[{“a”:“b”}、{“c”:“d”}、{“e”:“f”}、{“g”:“h”}]
是无效的json
private static IEnumerable<KeyValuePair<string, string>> ParseKeyValuePairs(string json)
{
    using (var reader = new StringReader(json))
    using (var jsonReader = new JsonTextReader(reader) { SupportMultipleContent = true })
    {
        JsonSerializer serializer = JsonSerializer.CreateDefault();

        while (jsonReader.Read())
        {
            if (jsonReader.TokenType == JsonToken.Comment)
            {
                continue;
            }

            var dictionaries = serializer.Deserialize<List<Dictionary<string, string>>>(jsonReader);

            foreach (KeyValuePair<string, string> keyValue in dictionaries.SelectMany(x => x))
            {
                yield return keyValue;
            }
        }
    }
}
string json = @"[{""a"":""b""},{""c"":""d""}],[{""e"":""f""},{""g"":""h""}]";

Dictionary<string, string> data = ParseKeyValuePairs(json).ToDictionary(x => x.Key, x => x.Value);