簡體   English   中英

將帶有 Jarray 對象列表的字符串轉換為 C# 中的 JSON

[英]Converting string with list of Jarray Objects to JSONin C#

我有一個像這樣的 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# 中解析上述字符串?

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

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

感謝 @dbc 為我指出正確的方向(請參閱閱讀完 JSON 內容后遇到的其他文本)。 請注意,此功能僅在 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);

結果:

字典

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM