将JSON值中的“ k1:v1,k2:v2,..”恢复为键值对

时间:2019-06-27 21:37:51

标签: c# json json.net keyvaluepair

我有一个这样的JSON值,我需要帮助,特别是将D变量的Value放入keyValuepair中。

.exe

我正在解析这个值。

{"A":727657,"B":"72.74:hello","C":"Http","D":"Value:0,Value1:79,Value2:56,Value3:45","E":0,"F":2}

我有一个这样的构造函数。

   MyJSONContructor MyJSONContructorObject = Newtonsoft.Json.JsonConvert.DeserializeObject<MyJSONContructor>(JSONValue);

我需要帮助的是变量D中的值,如果您发现其中包含多个值,我希望能够将它们放在keyValuePair中,就像这样

public MyJSONContructor(int A, string B, string C, string D, bool E,int F)
        {
            this.A = A;
            this.B = B;
            this.C = C;
            this.D = D;
            this.E = E;
            this.F = F;
        }

是否有一种简单的方法可以将它们添加到KeyValuePairs列表中,因为我们不知道Json中的D中会出现多少个键值对,所以我试图避免这样做。

List<KeyValuePair<string, string>> contentsToPost

2 个答案:

答案 0 :(得分:4)

如何?

var myMap = new Dictionary<string,string>();
var rawArray = dValuesInSingleString.Split(',');

foreach(var arrayItem in rawArray)
{
    var keyAndValueArray = arrayItem.Split(':');
    myMap.Add(keyAndValueArray[0], keyAndValueArray[1]);
}

KeyValuePair在Dictionary中使用,因此要获取KeyValuePairs的列表,您可以执行以下操作:

var myList = new List<KeyValuePair<string, string>>();

foreach (KeyValuePair<string, string> k in myMap)
{
    myList.Add(k);
}

答案 1 :(得分:2)

如果您对LINQ感到满意,可以这样做:

List<KeyValuePair<string, string>> kvps = 
    (from pair in MyJSONContructorObject.D.Split(',')
     let kv = pair.Split(':')
     select new KeyValuePair<string, string>(kv[0], kv[1])
    ).ToList();

提琴:https://dotnetfiddle.net/HHti3s