2014-04-11 112 views
0

有人能指出我如何處理這種情況的正確方向嗎?JSON.NET對象屬性

我收到了非常比如

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

在.NET中「平」的JSON數據我有兩個類是這樣的:

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地圖中的名字完美地映射到personName)。然而,我的類具有ColorInfo類型(自定義類)的屬性並且該類有一個名爲color的屬性的情況呢?

我需要以某種方式進入顏色類並將該顏色屬性分配給json中的on。

有沒有人有想法?

謝謝!

回答

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()); 
+0

等一下,我很困惑 - 彩光電是不實際的人的一個子類,對不起。我無法以這種方式返回新的ColorInfo。這也是真正的方法嗎?我很難理解這將採用「favoriteColor」字符串(例如,紅色),並將ColorInfo屬性分配給ColorInfo,然後將ColorInfo分配給Person。如果你可以灑更多的光,我會很感激:) – user3520332

+0

@ user3520332更新了我的答案。 –

+0

謝謝你會嘗試 - 也JsonCreationConverter是我必須讓自己正確的類?它不是本地json.net? – user3520332