2016-08-30 5 views
0

Json.net api JsonConvert.PopulateObject을 사용하고 있습니다.이 매개 변수는 먼저 json 문자열 두 개와 채우려는 실제 객체를 허용합니다.Json.net에서 사용자 정의 역 직렬화

내가 채우려는 객체의 구조는

internal class Customer 
{ 

    public Customer() 
    { 
     this.CustomerAddress = new Address(); 
    } 
    public string Name { get; set; } 

    public Address CustomerAddress { get; set; } 
} 

public class Address 
{ 
    public string State { get; set; } 
    public string City { get; set; } 

    public string ZipCode { get; set; } 
} 

내 JSON 문자열은 이제 Name 속성은 JSON 문자열에 존재 becuase 채워집니다

{ 
    "Name":"Jack", 
    "State":"ABC", 
    "City":"XX", 
    "ZipCode":"098" 
} 

입니다하지만 CustomerAddress입니다 인구가 유입되지 않습니다. json.net 라이브러리에서 json 문자열의 City 속성에서 CustomerAddress.City을 채울 수있는 방법이 있습니까?

답변

1

직접 - 아니요.

그러나이를 달성 할 수 있어야합니다. 여기에 시도 (당신이 JSON을 변경할 수 없습니다 가정)된다

class Customer 
{ 
    public string Name { get; set; } 
    public Address CustomerAddress { get; set; } = new Address(); // initial value 

    // private property used to get value from json 
    // attribute is needed to use not-matching names (e.g. if Customer already have City) 
    [JsonProperty(nameof(Address.City))] 
    string _city 
    { 
     set { CustomerAddress.City = value; } 
    } 

    // ... same for other properties of Address 
} 

다른 가능성 :

  • 변경 JSON 형식을 Address 객체를 포함;
  • 맞춤 직렬화 (예 : 바인더를 사용하여 가짜 유형을 직렬화하고 필요한 것으로 변환).
  • ... (더 있어야합니다).