首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSON序列化混淆

JSON序列化混淆
EN

Stack Overflow用户
提问于 2013-10-23 10:25:53
回答 1查看 403关注 0票数 0

我只是在构建一个测试Web,它接受一个JSON有效负载,只需从我的MVC Controller返回数组部分中的数据。

这是我被填充类序列化时的当前JSON字符串:

代码语言:javascript
复制
{"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的对象:

代码语言:javascript
复制
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类:

代码语言:javascript
复制
public class JobsList:IJobList
{
    #region IJobList Members

    public List<Jobs> JobList
    {
        get;
        set;
    }

    #endregion
}

职业类别:

代码语言:javascript
复制
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转换为生成类时,生成的类如下所示:

代码语言:javascript
复制
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中设置为JobsList数组中的“作业”节点吗?为什么生成的JSON2CSharp类将我的“作业”类映射为JobList类?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-24 01:59:38

基本上,这是因为反序列化器(在本例中是JSON2CSharp)不知道您将原始类命名为什么。或者你是如何构造它们的。它不知道你在“我当前的JSON字符串”下面发布的任何东西。

当您将JSON对象传递给它时,这就是它正在处理的所有信息。因此,它可以看出有某种对象(它称之为"RootObject"),它有一个名为"JobList“的对象数组。所以它把这个类叫做"JobList“。它在那里有一个选择--它可以简单地将列表命名为"JobList“,并将对象命名为其他的东西.但是它无法知道它最初来自一个名为"Jobs“的对象,因为它不在JSON中。不同的反序列化器可能会以不同的方式完成它。

我不太熟悉JSON2CSharp,所以我不知道它是否能做到这一点,但是有一些框架,给定对象定义,可以解析具有一致命名字段的JSON字符串,并将其加载到该对象中。例如,使用Json.NET,您可以这样做:

代码语言:javascript
复制
JobsList jobList = JsonConvert.DeserializeObject<JobsList>(JsonString);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19539089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档