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[]
李>
我不推荐服务器端更改的原因是:根据我的经验,一个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[]
,它将自动转换。