【发布时间】: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""}}",您的测试代码似乎可以工作 -
你是对的。但是反序列化后,我需要的字典没有值。