【发布时间】:2011-04-28 07:29:09
【问题描述】:
我看到了很多简单的 JSON 反序列化示例,但是当涉及到稍微复杂一些的东西时,就缺少示例。
我正在研究来自 GetResponse 的 API 的反序列化响应:
简单例如
{
"result" : {
"updated" : "1"
},
"error" : null
}
另一个:
{
"result" : null,
"error" : "Missing campaign"
}
这是另一个更复杂的潜在反应:
{
"result" : {
"CAMPAIGN_ID" : { // <-- This value will be different for each Campaign
"name" : "my_campaign_1",
"from_name" : "My From Name",
"from_email" : "me@emailaddress.com",
"reply_to_email" : "replies@emailaddress.com",
"created_on" : "2010-01-01 00:00:00"
}
},
"error" : null
}
对于最后一个,我的对象应该是什么样的?
我最初只是玩弄这样的事情......
private struct GenericResult {
public string error;
public Dictionary<string, object> result;
}
这将适用于我的所有响应,但是如果我没记错的话,我必须将其转换为访问对象的属性。
我想这样使用它:
JavaScriptSerializer jss = new JavaScriptSerializer();
var r = jss.Deserialize<GenericResult>(response_string);
// or... if I'm going to use a non-Generic object
var r = jss.Deserialize<GetCampaignResult>(response_string);
编辑
取回数据后,实际结构有一个问题。这是一个实际示例:
价值
{
"error":null,
"result":
{"ABQz": { // <-- As you can see, this is NOT a class name.
"from_email" : "from@email.com",
"created_on" : "2010-10-15 12:40:00",
"name" : "test_new_subscribers",
"from_name" : "John Smith",
"reply_to_email": "from@email.com"
}
}
}
现在我不知道那个值会是什么,我很难过。我想将该值作为 Campaign 对象的 ID 包含在内。
【问题讨论】:
标签: c# json serialization dictionary