在C#中将带有Jarray对象列表的字符串转换为JSON

时间:2018-11-01 15:19:38

标签: 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#中解析上述字符串?

1 个答案:

答案 0 :(得分:0)

我能够找到一种使用JsonReader.SupportMultipleContent解析以下字符串的方法:

  

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

感谢@dbc向我指出正确的方向(请参见Additional text encountered after finished reading JSON content)。  请注意,此功能仅从Json.NET的11.0.1版本起可用

以下方法使用JsonTextReader并返回IEnumerable<KeyValuePair<string, string>>

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;
            }
        }
    }
}

使用代码生成Dictionary<string, string>

string json = @"[{""a"":""b""},{""c"":""d""}],[{""e"":""f""},{""g"":""h""}]";

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

结果:

Dictionary