我看到了很多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中。