2014-02-10 175 views
1

以我塞纳里奥,有一段代码像下面在JSON响应实体: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); 
    } 
} 
+0

您的测试代码似乎工作,如果你改变JSON字符串这样'@ “{”“hashkeys”“:{”“key1”“:”“value1”“,”“key2”“:”“value2”“}}”' – Grundy

+0

You are right。但是在反序列化之后,我所需要的字典没有任何价值。 –

回答

1

可以使用

stringstring一个Dictionary这样

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

+0

感谢您的回应,Kaushik和Marcin。类型Dictionary 对我很有用。但我使用DataContractJsonSerializer,而不是使用json序列化库。 –

+0

牛顿在'json'中提供了很多特性,所以我个人比较喜欢这个。我会建议你也应该使用它。这将帮助你轻松完成任务。 –

+1

@WeiquanZhang反序列化为'Dictionary '应该可以在DataContractJsonSerializer中正常工作。 – MarcinJuraszek

1

它反序列化Dictionary<string, string>

这是一组KeyValuePair<string, string>,这正是你想要处理的。 "KeyX"将成为Key"valueX"将为Value字典entiry。