JSON.NET对象属性

时间:2014-04-11 15:11:29

标签: c# json json.net deserialization

有人能指出我如何解决这样一个案件的正确方向吗?

我收到非常“平淡”的json数据,例如

 {"Color":"Red", "Number":"7", "Name":"Bob"}

然而在.NET中我有两个这样的类:

 Class Person
  { 
    [JsonProperty(PropertyName="Name")]
    public personName {get;set;}

    [//HOW DO I DO THIS HERE???]
    public ColorInfo favoriteColor {get;set;}
  }

 Class ColorInfo
 {
   public String color {get;set;}
 }

正如您所看到的,我得到的数据与我的对象的任何部分都不匹配。为了解决基本问题,我只做JsonProperty并将其中一个映射到另一个(因此json中的Name映射到personName完美)。然而,我的类具有ColorInfo类型的属性(自定义类)并且THAT类具有称为颜色的属性的情况呢?

我需要以某种方式进入颜色类并将该颜色属性分配给json中的on。

有没有人有想法?

谢谢!

1 个答案:

答案 0 :(得分:3)

使用CustomCreationConverter,代码更简单:

public class PersonConverter : JsonCreationConverter<Person>
{
    protected override Person Create(Type objectType, JObject jObject)
    {
        if (FieldExists("favoriteColor ", jObject))
        {
            return new Person() { favoriteColor = new ColorInfo() { Color = "Red" };
        }
    }

    private bool FieldExists(string fieldName, JObject jObject)
    {
        return jObject[fieldName] != null;
    }
}

然后:

var serializedObject = JsonConvert.SerializeObject( personInstance);
JsonConvert.DeserializeObject<Person>( serializedObject , new PersonConverter());