我只是构建一个测试Web API,它接受一个JSON有效负载,并简单地从我的MVC控制器发回数组部分中的数据。
这是我填充的类序列化后的当前JSON字符串:
{"JobList":[{"ID":1,"Name":"Dave","Age":23,"StartDate":"10/23/2013 6:22:50 AM","JobTitle":"Developer"},{"ID":2,"Name":"John","Age":44,"StartDate":"10/23/2013 6:22:50 AM","JobTitle":"QA"},{"ID":3,"Name":"Dave","Age":23,"StartDate":"10/23/2013 6:22:50 AM","JobTitle":"Senior Developer"}]}
这是用于创建此JSON的对象:
var jobList = new JobsList()
{
JobList = new List<Jobs>()
{
new Jobs()
{
Age = 23,
ID = 1,
Name = "Dave",
StartDate = DateTime.Now.ToString(),
JobTitle = "Developer"
},
new Jobs()
{
Age = 44,
ID = 2,
Name = "John",
StartDate = DateTime.Now.ToString(),
JobTitle = "QA"
},
new Jobs()
{
Age = 23,
ID = 3,
Name = "Dave",
StartDate = DateTime.Now.ToString(),
JobTitle = "Senior Developer"
}
}
};
以下是我的个别课程:
JobsList Class:
public class JobsList:IJobList
{
#region IJobList Members
public List<Jobs> JobList
{
get;
set;
}
#endregion
}
职位类:
public class Jobs:Interfaces.IJobs
{
#region IJobs Members
public int ID
{
get;
set;
}
public string Name
{
get;
set;
}
public int Age
{
get;
set;
}
public string StartDate
{
get;
set;
}
public string JobTitle
{
get;
set;
}
#endregion
}
当我通过使用JSON2Csharp转换我的JSON来生成类时,类生成如下所示:
public class JobList
{
public int ID { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string StartDate { get; set; }
public string JobTitle { get; set; }
}
public class RootObject
{
public List<JobList> JobList { get; set; }
}
这对我来说似乎不对。任何人都可以解释为什么我的JSON设置中没有“Jobs”节点到JobsList数组?为什么生成的JSON2CSharp类将我的'Jobs'类映射为JobList类?
答案 0 :(得分:0)
基本上,这是因为反序列化器(在本例中为JSON2CSharp)不知道您将原始类命名为什么。或者你是如何构建它们的。它不知道您在“我当前的JSON字符串”下面发布的任何内容。
当你把那个JSON对象交给它时,就是它正在处理的所有信息。因此,它可以告诉我们存在某种对象(它称之为“RootObject”),它有一个名为“JobList”的对象数组。所以它称为“JobList”类。它有一个选择 - 它可以简单地调用列表“JobList”并将对象命名为其他东西......但它无法知道它最初来自名为“Jobs”的对象,因为它不在JSON。不同的反序列化器可能采用不同的方式。
我不熟悉JSON2CSharp,所以我不知道它是否可以做到这一点,但是有一些框架,给定对象定义,可以解析具有一致命名字段的JSON字符串并将其加载到该对象中。例如,使用Json.NET,您可以执行以下操作:
JobsList jobList = JsonConvert.DeserializeObject<JobsList>(JsonString);