我有一个看起来像这样的对象:
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"}]
}
如何转换上面的内容,以使参数看起来像这样?
“ firstName”:“ John”, “ lastName”:“ Doe”
现在发布数据时的外观是
"parameters": "{"firstName": "John"}, {"lastName": "Doe"}]"
答案 0 :(得分:0)
首先,您的JSON应该类似于
{"parameters": [{"firstName": "John"}, {"lastName": "Doe"}]}
因为您需要{}符号来通知转换器对象,而[]用于将多个值添加到一个属性。
"parameters": "{"firstName": "John"}, {"lastName": "Doe"}]"
不是有效的JSON数据。
之后,这只是简单的c#转换。我会这样:
var jss = new JavaScriptSerializer();
var dict = jss.Deserialize<Dictionary<string, string>>(YOURJSONVARIABLE);
var name = dict['firstName'];
当然要执行此操作,您需要将using System.Web
添加到您的c#文件中。
另外...此选项与.net framework> 4.5兼容):)
答案 1 :(得分:-1)
在js端
var result=getYourData();
result.parameters= Object.keys(result.parameters).map(function(key){
return {}[key]=result.parameters[key];
});
或
var result=getYourData();
result.parameters= Object.keys(result.parameters).map(function(key){
var pram={};
return pram[key]=result.parameters[key];
});
如果使用C#代码,则有2种选择(我不建议同时使用):
dictionary<string, object>
更改为List<KeyValuePair<string, object>>
或KeyValuePair<string, object>[]
; 如果您选择c#的第一种选择,请尝试以下操作:Serialize List<KeyValuePair<string, string>> as JSON
我不建议在服务器端进行更改的原因是:根据我的经验,一个API可以在许多部分中重用,API不应指定许多数据格式,但是调用者应按摩响应