C# 将json键值数组转换为字典?

C# 将json键值数组转换为字典?,c#,json,C#,Json,我有一个像这样的对象: public class MyObj { [JsonProperty("someProp")] public string someProp { get; set; } [JsonProperty("parameters")] [JsonExtensionData] public IDictionary<string, object> Parameters { get; set; } = new Dictionary&

我有一个像这样的对象:

public class MyObj
{
    [JsonProperty("someProp")]
    public string someProp { get; set; }

    [JsonProperty("parameters")]
    [JsonExtensionData]
    public IDictionary<string, object> Parameters { get; set; } = new Dictionary<string, object>();
}

{
    "parameters" : [{"firstName": "John"}, {"lastName": "Doe"}]
}
var jss = new JavaScriptSerializer();
var dict = jss.Deserialize<Dictionary<string, string>>(YOURJSONVARIABLE);
var name = dict['firstName'];
在js方面

var result=getYourData();
result.parameters= Object.keys(result.parameters).map(function(key){
    return {}[key]=result.parameters[key];
});

如果使用c#代码,您有两种选择(我不建议两者都使用):

  • dictionary
    更改为
    List
    KeyValuePair[]
  • 使用CustomConverter(太重的解决方案,可能是最后的选择)
  • 如果选择c#的第一个选项,请尝试以下操作:


    我不推荐服务器端更改的原因是:根据我的经验,一个API可以在多个部分中重用,API不应该指定许多数据格式,但调用方应该按摩响应,首先,JSON应该是这样的

    {"parameters": [{"firstName": "John"}, {"lastName": "Doe"}]}
    
    因为您需要{}符号来通知对象的转换器,[]用于向一个atribute添加多个值。
    “参数”:“{”firstName:“John”},{”lastName:“Doe”}]“
    不是有效的JSON数据

    在那之后就是简单的c#转换。我会这样做:

    public class MyObj
    {
        [JsonProperty("someProp")]
        public string someProp { get; set; }
    
        [JsonProperty("parameters")]
        [JsonExtensionData]
        public IDictionary<string, object> Parameters { get; set; } = new Dictionary<string, object>();
    }
    
    {
        "parameters" : [{"firstName": "John"}, {"lastName": "Doe"}]
    }
    
    var jss = new JavaScriptSerializer();
    var dict = jss.Deserialize<Dictionary<string, string>>(YOURJSONVARIABLE);
    var name = dict['firstName'];
    
    var jss=new JavaScriptSerializer();
    var dict=jss.Deserialize(YOURJSONVARIABLE);
    var name=dict['firstName'];
    
    当然,要使其起作用,您需要使用System.Web将
    添加到您的c#文件中。
    
    而且此选项与.net framework>4.5:)兼容。

    最后一个JSON位中缺少某些内容。。。这是无效的。您可能需要实现自己的自定义
    JsonConverter
    类来获得该行为。默认情况下,Newtonsoft只将字典本身转换为JSON对象,但它将嵌套在C#中具有dictionary属性的对象中。当我将dictionary更改为IEnumerable时,我的对象在发布时为null。我应该提到IEnumerable可以是List、[]等等。您不必使用IEnumerable。如果是,请使用以下命令:
    newJavaScriptSerializer().Serialize(param)。但是如果使用
    List
    KeyValuePair[]
    ,它将自动转换。