2012-01-04 8 views
3

다음 json을 도메인 객체로 변환하려고합니다.json 문자열을 도메인 객체에 deserialize하는 방법은 무엇입니까?

는 JSON :

[{"name":"McDonalds","deals":[{"desc":"Onion Rings free with Double Cheese burgers"}],"geometry":{"lat":13.073412,"lng":80.221393}},{"name":"JusSportz","deals":[{"desc":"20% off on Wilson Rackets"}],"geometry":{"lat":13.073231,"lng":80.221181}}] 

모델 :

[DataContract] 
    public class Deal 
    { 
     [DataMember(Name="name")] 
     public string Store { get; set; } 

     [DataMember(Name="deals")] 
     public Offer[] Offers {get; set;} 

     [DataMember(Name="geometry")] 
     public GeoCoordinate Location { get; set; } 

    } 

    [DataContract] 
    public class Offer 
    { 
     [DataMember] 
     public string deal; 
    } 

나는 System.Runtime.Serialization.Json 네임 스페이스에 있으며 DataContractJsonSerializer 시도는 분명히있다 문자열을 객체로 변환 할 방법이 없습니다. 이 일을 할 수있게 해주는 다른 도서관이 있습니까? 또는 Json 문자열을 중간 형식으로 변환하여이 라이브러리를 사용하여이 작업을 수행 할 수있는 방법이 있습니까?

답변

2

가 여기 다시 내 도메인 개체에 JSON을 역 직렬화 방법입니다.

using (var reader = new MemoryStream(Encoding.Unicode.GetBytes("YourStringValue"))) 
{ 
    var ser = new DataContractJsonSerializer(typeof(Deal)); 
    return (Deal)ser.ReadObject(reader); 
} 

이 제품은 찾고 계신 것입니까?

+0

나는 그렇게 생각한다. 나는 또한 거래의 배열을 (잘못된) 거래로 변환하는 중일 수도 있다고 생각한다. 잘못된 캐스트 예외가 발생합니다. 그것을 시도해보고 그것을 받아들이면 안된다. – gprasant

+0

비 직렬화하고있는 모든 클래스에 데이터 계약 속성이 있는지 확인한다. 그렇지 않은 경우 추가 직렬화 문제가 발생할 수 있습니다. –

1

조금 모델을 변경하려고 :

[DataContract] 
public class Deal 
{ 
    [DataMember(Name="name")] 
    public string Store { get; set; } 

    [DataMember(Name="deals")] 
    public Offer[] Offers {get; set;} 

    [DataMember(Name="geometry")] 
    public GeoCoordinate Location { get; set; } 

} 

[DataContract] 
public class Offer 
{ 
    [DataMember(Name="desc")] 
    public string deal { get; set; } 
} 
+0

모델에 문제가 있다고 생각하지 않습니다. JSON을 변환/파싱하는 방법을 보여줍니다. – gprasant

관련 문제