2016-10-19 4 views
0

외부 API에서 JSON을 검색하고 있는데, 컨트롤을 사용할 수없고 일부 필드가 속성으로 중첩 된 객체로 역 직렬화해야합니다. 주 개체이므로 직선적 인 디시 리아리스가 작동하지 않습니다.JSON.NET을 사용하여 복잡한 JSON 객체를 비 병렬화하기

나는 내 문제를 발견 한 가장 가까운 질문은 :

Json .Net serialize flat object into a complex object (change objects structure on serialization/deserialization)

정말 내가 JSON.NET을 사용하고 여전히 노력에 비교적 새로운 해요로하지만 내 문제에 이것을 적용 할 수 어떻게 작동하는지 이해할 수 있습니다.

작은 샘플은 다시 API에서 JSON을 설명합니다 :

{ 
    FirstName: "John", 
    LastName: "Smith", 
    PassportNo: "xxxxx", 
    NiNo: "xxxxx", 
} 

클래스 (들)에 내가 deserialise 싶어 : 나는 이동하는 방법을 잘하지 않았다

internal sealed class Person 
{ 
    [JsonProperty(PropertyName = "FirstName")] 
    public string FirstName { get; set; } 

    [JsonProperty(PropertyName = "LastName")] 
    public string LastName { get; set; } 

    public PrivateData PrivateData { get; set; } 
} 

internal sealed class PrivateData 
{ 
    [JsonProperty(PropertyName = "PassportNo")] 
    public string PassportNo { get; set; } 

    [JsonProperty(PropertyName = "NiNo")] 
    public string NationalInsuranceNumber { get; set; } 
} 

필요한 결과를 얻기 위해 사용자 정의 계약 분석기/JSON 변환기를 구현하는 방법에 대해 설명합니다.

답변

1

JsonConvert 클래스는 복잡한 클래스에서 플랫 json 구조를 변환 할 수 없기 때문에 JSON.Net 클래스를 사용할 수 없습니다. 내가 너 안에 있었다면 나는 json을 Dictionary<string, string>으로 파싱하고 person 클래스를 만들 것이다. 이 같은
뭔가 : 내가 볼

Dictionary<string, string> values = JsonConvert.DeserializeObject<Dictionary<string, string>>(json); 
var person = new Person { 
       FirstName = values["FirstName"] , 
       LastName = values["LastName "], 
       PrivateData = new PrivateData { 
            PassportNo = values["PassportNo"], 
            NationalInsuranceNumber = values["NiNo"] 
               } 
       }; 
+0

, 나는이 방법을 생각하지만 하드 코드 유지 보수에 대한 매핑이없는 기대하고 있었는데 그것은 특히 확대됨 아니다 나는 반사를 사용하지 않습니다. 고마워요. 아마이 일을하고 유지 관리 비용을 처리 할 것입니다. – Vistari

+0

반성해도 문제가 발생할 수 있습니다. Person 클래스에 다른 클래스 핸들러가 있고 그 핸들러에 'NiNo'라는 또 다른 속성이 있다고 가정 해 보겠습니다. 식별자 (예 :'prefix.NiNo')가없는 경우 속성에 올바른 값을 설정하는 것이 가장 불가능합니다 – Tinwor

관련 문제