C# “恢复”;k1:v1,k2:v2,…”;从JSON值作为键值对

C# “恢复”;k1:v1,k2:v2,…”;从JSON值作为键值对,c#,json,json.net,keyvaluepair,C#,Json,Json.net,Keyvaluepair,我有一个类似这样的JSON值,我需要帮助将D变量的值放入keyValuepair中 {"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<MyJSO

我有一个类似这样的JSON值,我需要帮助将D变量的值放入keyValuepair中

{"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);
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;
        }
var list = new List<KeyValuePair<string, string>>() { 
                new KeyValuePair<string, string>("Value", 0),
                new KeyValuePair<string, string>("Value1", 79),
我需要帮助的是变量D中的值,如果你注意到它里面有几个值,我想把它们放在一个keyValuePair中,类似这样的

List<KeyValuePair<string, string>> contentsToPost
List contentsToPost
有没有一种简单的方法可以将它们添加到KeyValuePairs列表中,因为我们不知道在Json中会有多少个键值对以D形式出现,所以我试图避免这样做

   MyJSONContructor MyJSONContructorObject = Newtonsoft.Json.JsonConvert.DeserializeObject<MyJSONContructor>(JSONValue);
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;
        }
var list = new List<KeyValuePair<string, string>>() { 
                new KeyValuePair<string, string>("Value", 0),
                new KeyValuePair<string, string>("Value1", 79),
var list=new list(){
新的KeyValuePair(“值”,0),
新的KeyValuePair(“Value1”,79),
这个怎么样:

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]);
}
var myMap=newdictionary();
var rawArray=dValuesInSingleString.Split(',');
foreach(rawArray中的var arrayItem)
{
var-keyAndValueArray=arrayItem.Split(“:”);
Add(keyAndValueArray[0],keyAndValueArray[1]);
}
KeyValuePair在字典中使用,因此要获得KeyValuePair列表,您可以执行以下操作:

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

foreach (KeyValuePair<string, string> k in myMap)
{
    myList.Add(k);
}
var myList=new List();
foreach(myMap中的KeyValuePair k)
{
添加(k);
}

如果您觉得舒服,可以这样做:

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();
列出KVP=
(来自MyJSONContractorObject.D.Split(',')中的对)
设kv=pair.Split(“:”)
选择新的KeyValuePair(kv[0],kv[1])
).ToList();

Fiddle:

顺序重要吗?否则你可以使用Dictionary。Dictionary是一个HashMap。“直接”方法是使用类似
D=D.Split(',')。Select(p=>p.Split(':',2))。ToDictionary(x=>x[0],x=>x[1])
(或者根据具体需要进行修改,如
。Select(x=>newkeyvaluepair(x[0],x[1])。ToList()
)。这只是单向反序列化,Json.NET可能会提供更多的“积分”方法。只要正确的键和值配对,顺序实际上并不重要。您尝试解析的对象是年度数据结构奖的最佳候选对象。现在才是6月份。;
好的,这样就不起作用,因为我需要在f中使用它列表内容的ormat Hanks Kira,我需要能够将其分配给KeyValuePair列表的对象,我该怎么做?非常感谢Kira,这非常有效…Brian的代码也很有效。非常感谢各位。工作非常完美。非常感谢。