2013-01-07 3 views
1

내가 몇 가지 속성 이름 differes는 ("의 dataa가", "dataB은")하지만 동일한 구조를JSON.NET 알 수없는 유형의 직렬화

{ 
    "mainprop": "val", 
    "dataA": { "prop1":"val", "prop2":"val"} 
} 

{ 
    "mainprop": "val", 
    "dataB": { "prop1":"val", "prop2":"val"} 
} 
을 포함하는 경우, JSON 문자열을 다음과 같은 한 가정 내가, 내가 처리 할 수있는 방법 D 제네릭 클래스를 다른 말로

Class Generic 
{ 
    string mainprop; 
    DataClass data; 
} 

Class DataClass 
{ 
    string prop1; 
    string prop2; 
} 

을 다음과 같이 객체에이 jsons를 역 직렬화 수있는 방법

속성의 이름에 따른 비 순차 화.

+0

스택 오버플로에 오신 것을 환영합니다! 너 뭐 해봤 니? – IronMan84

+0

정규 표현식을 사용하여 대상 클래스와 일치하도록 json 문자열을 사전 처리 할 수 ​​있습니다. –

+0

문자열 전처리를 피하고보다 세련된 솔루션을 찾으려고합니다. –

답변

0

항상 일반 역 직렬화 (Dictionary<string, object>)를 수행 한 다음 값을 직접 매핑 할 수 있지만이 값은 사용자가 원하지 않는 것으로 판단됩니다.

내 머리 꼭대기에서 생각할 수있는 유일한 방법은 역 직렬화/직렬화 전용으로 두 개의 더미 개체를 만드는 것입니다.

public class GenericA : Generic { 
    public DataClass dataA { get { return data; } set { data = value; } } 
} 

public class GenericB : Generic { 
    public DataClass dataB { get { return data; } set { data = value; } } 
} 

Generic a = JsonConvert.DeserializeObject<GenericA>("JSON using dataA"); 
Generic b = JsonConvert.DeserializeObject<GenericB>("JSON using dataB"); 

이 코드는 테스트하지 않았습니다.

편집

당신은 그래서 당신은 두 번 같은 특성을 갖는없이 GenericAGenericB를 직렬화 할 수 [JsonIgnore]data 속성 등록 할 수 있습니다.

+0

응답 해 주셔서 감사합니다.하지만 솔루션에 더미 클래스를 생성해야합니다. 내 경우 속성의 "이름"배열이 너무 크고 동적입니다. 일부 실종자를 프로그래밍 방식으로 처리하는 방법이 있습니까? JSON.NET 설정에 MissingMemberHandling 특성이 있지만 처리 방법이 보이지 않고 적절한 클래스 deserialization을 반환합니다. –