2012-07-16 5 views
0

현재 Json deserializing 코드로 작업하고 있습니다. 여기 내 문제 :개체로 Json 배열을 구문 분석

"location":[47.618832,-122.21599] 

하는 동안 나는 쉽게 이중 배열로 구문 분석 할 수 있습니다 : 나는 배열을 발생 JSON 파일에서

은 다음과 같습니다

[DataMember(Name = "location")] 
public double[] Location { get; set; } 

하지만 내가 원하는 이 경우 객체를 생성하려면 locationCoordinate 유형으로 정의하고 다른 네임 스페이스에 정의 할 수 있습니다.

public Coordinate(double lat, double long)

그래서 나는이 사건에 직접 객체 좌표 생성 할 수있는 방법이 : 그것은이 같은 생성자가?

고맙습니다.

답변

1

직접적이 아니라 훨씬 깨끗한 방법입니다.

public class MyClass 
{ 
     [DataMember(Name = "location")] 
     public double[] Location { get; set; } 

     public Coordinate Coordinate 
     { 
      get 
      { 
        if(Location.Lenght > 2) 
        { 
         return new Coordinate() { Lat = Location[0], Lang = Location[1] }; 
        } 

        return null; 
      } 
     } 

} 

public class Coordinate 
{ 
     public double Lat { get; set;} 
     public double Lang { get; set;} 
} 
0

당신은 (XSD를 XML 스키마 문서의

직렬화, 역 직렬화하는 동안 DataContractSerializer에 의해 서로에 대한 하나 개의 유형을 대체하는 데 필요한 방법을 제공합니다 IDataContractSurrogate 인터페이스 및 수출과 수입을 구현할 수 있습니다).

0

내가 직접 JSON과 협력하지 않은하지만 당신은이 위치 속성을 가져 부동산/세트 좌표 수 : 등 물론

// Not affected by JSon deserialization 
[ScriptIgnore] 
public Coordinate Coordinate {get; set;} 

// Serialized/Deserialized by JSon 
public double[] Location { 
    get 
     { 
      return new double[] {Coordinate.Latitude,Coordinate.Longitude}; 
     } 
    set 
     { 
      Coordinate = new Coordinate(value[0],value[1]); 
     } 
} 

당신이 적절한 범위 검사를 추가해야합니다,

1

구문 분석 된 데이터를 비공개로 표시하고 원하는 방식으로 표시 할 수 있습니다.

public class MyClass 
{ 
    public struct Coordinate 
    { 
     public double Lat; 
     public doubel Lon; 
    } 

    [DataMember(Name = "location")] 
    private double[] _Location { get; set; } 

    public Coordinate Location 
    { 
     get 
     { 
      return new Coordinate { Lat = _Location[0], Lon = _Location[1]}; 
     } 
     set 
     { 
      double[0] = value.Lat; 
      double[1] = value.Lon; 
    } 

} 

난 그냥 함께이 던져 아마이 불변의 유형을 좌표 내가 같음의을 비교 한 및 == 연산자를 오버라이드 있는지 확인 할 것.