【发布时间】:2015-04-24 14:47:39
【问题描述】:
我正在尝试从 json 反序列化为 List<struct> - 但是我的对象始终为空。源 JSON 中的数据类型似乎是正确的,而且我的代码没有抛出任何错误,所以我完全不知道为什么它不起作用。
我要转入的班级:
public class SystemStatusRules
{
public struct EmailItem
{
public int EmailSubject_Id;
public bool IsSubject;
public string Email_String;
public int StatusCode;
}
public List<EmailItem> EmailItems {get; set;}
}
我的 JSON:
{"EmailItems":[
{"EmailSubject_Id":16,"IsSubject":true,"Email_String":"Cube Build Successful","StatusCode":0},
{"EmailSubject_Id":17,"IsSubject":true,"Email_String":"Cube Build Failure","StatusCode":0}
]}
最后,我的反序列化代码:
[HttpPost]
public bool SetAllStatusRules(string ruleList )
{
SystemStatusRules subjectRules =
JsonConvert.DeserializeObject<SystemStatusRules>(ruleList);
}
以防万一,我的序列化代码:
objArray.push({ EmailSubject_Id: SubjectId, IsSubject: IsSubject,
Email_String: EmailSubject, StatusCode: status });
objArray = { EmailItems: objArray };
var rulesJSON = JSON.stringify(objArray);
$.ajax({
url: "Management/SetAllStatusRules",
type: 'POST',
data: 'ruleList='+rulesJSON,
success: function (result) {
MyResultFunction(result);
}
});
编辑:
这与我铸造一个对象有关。以下代码具有正确填充的 subjectRules 变量。但是 ssr 为空。
object subjectRules = JsonConvert.DeserializeObject<SystemStatusRules>(StatusRules);
SystemStatusRules ssr = (SystemStatusRules)subjectRules;
我不知道出了什么问题,但是反序列化为 var 允许我使用带有数据的对象作为解决方法。
【问题讨论】:
-
EmailItems变量是字段。为每个人添加{get;set;}。 -
@EBrown:这在这里应该没什么区别...它们是 public 字段,因此应该正确填充它们...
-
如果我将它们更改为属性,仍然返回 null。
-
这个works fine for me。这是你所有的代码吗?
-
这是唯一被执行的代码。除非我的配置中有可能影响它的东西。我正在使用 Newtonsoft.Json 版本=4.5.6。因为这是唯一与我正在使用的 MVC 版本兼容的版本。
标签: c# asp.net json asp.net-mvc json.net