【问题标题】:JSon deserialize for hashJSON反序列化哈希
【发布时间】:2014-02-10 05:05:32
【问题描述】:

在我的 senario 中,JSon 响应实体中有如下代码:

"hashkeys":
{
    "key1":"value1",
    "key2":"value2",
    "key3":"value3"
}

诸如“key1”、“key2”、“key3”之类的键(甚至键的数量)仅在运行时才知道,但在编码时无法确定。

如何编码 JSON 实体以反序列化此类响应?我正在使用 C# 语言 DataContractJsonSerializer。

我的测试代码:

[DataContract]
class Test {
    [DataMember(Name = "hashkeys")]
    public Dictionary<string, string> dic { get; set; }

}

class Program
{
    public static T FromJson<T>(string strJson) where T : class
    {
        DataContractJsonSerializer ds = new DataContractJsonSerializer(typeof(T));
        using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(strJson)))
        {
            return ds.ReadObject(ms) as T;
        }
    }

    static void Main(string[] args)
    {
        string json = @"{""hashkeys"":{""key1"":""value1"",""key2"":""value2""}}";
        Test MyResponse = FromJson<Test>(json);
        Console.WriteLine(MyResponse);
    }
}

【问题讨论】:

  • 如果您像这样更改 json 字符串 @"{""hashkeys"":{""key1"":""value1"",""key2"":""value2""}}",您的测试代码似乎可以工作
  • 你是对的。但是反序列化后,我需要的字典没有值。

标签: c# json map


【解决方案1】:

你可以使用

像这样制作Dictionarystringstring

string json = @"{""key1"":""value1"",""key2"":""value2""}";   
Dictonary<string,string> MyResponse =     JsonConvert.DesirializeObject<Dictionary<string,string>>(json);
Console.WriteLine(values.Count);
// 2
Console.WriteLine(values["key1"]);
// Value1

更多示例和参考资料Click Here

【讨论】:

  • 感谢 Kaushik 和 Marcin 的回复。 Dictionary 类型对我有好处。但我使用的是 DataContractJsonSerializer,而不是 newtonking json 序列化库。
  • newtonking 在json 中提供了很多功能,所以我个人更喜欢这样。我建议你也应该使用它。这将帮助您轻松完成任务。
  • @WeiquanZhang 反序列化为Dictionary&lt;string, string&gt; 应该可以与DataContractJsonSerializer 正常工作。
  • 我发现了不同之处。如果我使用 DataContractJsonSerializer,它需要在响应中标记“Key”和“Value”,即响应应该看起来像 {"Key":"key1"","Value":"value1"},{"Key ":"key2"","Value":"value2"}"。Newtonking 的实现更直接。由于我不能接触服务端代码,所以我只能选择 newtonking...
  • @WeiquanZhang 嗯嗯嗯嗯,太好听了! :)
【解决方案2】:

反序列化为Dictionary&lt;string, string&gt;

这是KeyValuePair&lt;string, string&gt; 的集合,这正是您要处理的。 "KeyX" 将变为 Key"valueX" 将成为字典条目的 Value

【讨论】:

    猜你喜欢
    • 2015-03-13
    • 2019-06-13
    • 2014-02-21
    • 2020-03-14
    • 1970-01-01
    • 2012-05-28
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多