2017-08-16 46 views
1

我的客户端送我一个对象是这样的:转换JS对象与列表C#列表

"content": { 
    "title": "data title", 
    "values": { 
     "25": "some description", 
     "26": "some info", 
     "27": "some text", 
     "28": "some other data", 
     "29": "more info", 
     "30": "more text", 
     "31": "and another more description" 
    } 
} 

,我需要保存一个C#List<>对象的values。 我试图获取和保存这样的价值观:

public static List<MyKeyValuePair> GetClientValues(dynamic content) 
{ 
    var myList = new List<MyKeyValuePair>(); 

    try 
    { 
     foreach (PropertyInfo pi in content.values.GetType().GetProperties()) 
     { 
      var value = ""; 
      myList.Add(new MyKeyValuePair() { Id = int.Parse(pi.Name), Description = pi.GetValue(value, null).ToString() }); 
     } 
    } 
    catch { } 

    return myList; 
} 

但是在foreach行我收到此错误信息:

“System.Collections.Generic.Dictionary.values '是 由于其保护级别而无法访问

我该如何解决这个问题?

回答

3

如果动态已经打字,你应该能够做到以下几点:

public static List<MyKeyValuePair> GetClientValues(dynamic content) 
{ 
    var myList = new List<MyKeyValuePair>(); 

    foreach (var kv in content["values"]) 
    { 
     myList.Add(new MyKeyValuePair { 
      Id = int.Parse(kv.Key), 
      Description = kv.Value 
     }); 
    } 

    return myList; 
} 

否则,您可能需要反序列化输入JSON字符串。

+0

谢谢@styfle!有了这段代码,我也得到了同样的错误信息,但是我将我的'foreach'行更改为'foreach(var kv in content [“values”])',现在它完美地工作。非常感谢 – Ninita

+0

我更新了我的答案,谢谢! – styfle

0

如果您使用的是Visual Studio 2013及更高版本,请复制此json并使用粘贴json作为编辑菜单下的类生成一个类,但是如果您使用较低版本的VS,仍然可以输出类结构,然后下一步就是使用newtonsoft json将json反序列化到上面创建的类中。