将JSON对象映射到c#类属性

时间:2015-10-06 15:56:16

标签: c# json c#-4.0

我从第三方API获取了大量JSON数据,如下所示:

returnValue = data["value"].ToObject<List<T>>();

除了一个字段之外的所有字段都只是基本名称:这样的值对:

"Name":"Value"

我将我需要的值映射到这样的类:

public sealed class Project
{
    public string Id { get; set; }
    public string Title { get; set; }
    public string Url { get; set; }
    public DateTime ProjectDateLocal { get; set; }
    public string ParentFolderName { get; set; }
    public string ParentFolderId { get; set; }
    //causing trouble
    public Int32 ProjectTypeId { get; set; }

    public string PlayerUrl
    {
        get
        {
            return "http://em.edu.edu/prj/Play/" + this.Id;
        }
    }
}

但是,一个名称:值对很复杂:

"CustomFieldValues":[
        {
          "FieldName":"ProjectTypeId","FieldDefinitionId":"37a2ffeb3bd441f6a60158458910a04d40","DataType":"Integer","Value":"100105"
        }
      ]

我只需要FieldName(ProjectTypeId)和Value,有没有办法让类识别出来并将其设置在我的ProjectTypeId属性中?

谢谢!

2 个答案:

答案 0 :(得分:2)

使用Json.net反序列化JsonConvert.Deserialize<Project>(jsonStringContent)

Json.net将进入多个级别,只需添加一个新类,让Project拥有该属性。

public class CustomFieldValue
{
    public string FieldName {get;set;}
    public string Value {get; set;}
}

并将其列表添加到您的项目中。

public sealed class Project
{
    public string Id { get; set; }
    ...
    public List<CustomFieldValue> CustomFieldValues { get; set; }
}

Json.net不会有任何问题。如果你不添加FieldDefinitionId等,那么Json.net将忽略它。

http://www.newtonsoft.com/json

答案 1 :(得分:1)

正如@viggity所述,您可以使用Newtonsoft解决您的问题,并且提供的解决方案很好。你唯一要做的就是为Deserializer提供一个好的字符串json。

如果您想要更简单的解决方案,为什么不使用data["value"].ToObject<List<Project>>()? 注意:为映射分配像[JsonProperty("FieldNameFromJson")]这样的属性是完整的。

有关如何执行此操作的详细信息,请参阅此post