2014-04-11 3 views
0

누군가이 문제를 해결하는 방법에 대해 올바른 방향으로 나를 가리킬 수 있습니까?JSON.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;} 
} 

당신이 볼 수 그래서, 내가 무엇입니까 데이터 : I 수신하고

매우 같은 .NET에서 그러나

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

으로 "평면"JSON 데이터는이 같은 두 개의 클래스가 내 개체의 어떤 부분과도 일치하지 않습니다. 기본적인 것들을 다루기 위해, 나는 JsonProperty를 수행하고 하나를 다른 것으로 맵핑 할 것이다 (그래서 json의 Name은 personName에 완벽하게 매핑된다). 그러나 내 클래스가 ColorInfo (사용자 정의 클래스) 유형의 속성을 갖고 THAT 클래스가 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 실제로 사람의 서브 클래스가 아닌, 죄송합니다. 이런 식으로 새로운 ColorInfo를 반환 할 수 없습니다. 또한 이것을 실제로하는 방법입니까? "favoriteColor"문자열 (예 : 빨간색)을 사용하고 ColorInfo의 속성을 ColorInfo에 할당 한 다음 Person에 ColorInfo를 할당하는 방법을 이해하는 데 어려움을 겪고 있습니다. 좀 더 빛을 흘릴 수 있다면 그것을 감사하겠습니다 :) – user3520332

+0

@ user3520332 내 대답이 업데이트되었습니다. –

+0

감사합니다 시도 - 또한 JsonCreationConverter 내가 직접 만들어야 할 수업입니까? json.net에 고유하지 않습니다. – user3520332