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

时间:2018-07-11 17:50:54

标签: c# json

我有一个看起来像这样的对象:

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"}]"

2 个答案:

答案 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种选择(我不建议同时使用):

  1. dictionary<string, object>更改为List<KeyValuePair<string, object>>KeyValuePair<string, object>[]
  2. 使用CustomConverter(过于繁琐的解决方案,可能是最后的选择)。

如果您选择c#的第一种选择,请尝试以下操作:Serialize List<KeyValuePair<string, string>> as JSON

我不建议在服务器端进行更改的原因是:根据我的经验,一个API可以在许多部分中重用,API不应指定许多数据格式,但是调用者应按摩响应