簡體   English   中英

將Json數組解析為對象

[英]Parse Json array into object

我目前正在使用Json反序列化代碼。 這是我的問題:

在Json文件中我遇到了一個如下所示的數組:

"location":[47.618832,-122.21599]

我可以輕松解析為雙數組:

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

但是我想在這種情況下生成一個對象,讓我們調用它在其他名稱空間中定義的Coordinate類型的location 它有這樣的構造函數:

public Coordinate(double lat, double long)

那么有一種方法可以在這種情況下直接生成一個Coordinate對象嗎?

謝謝

不是直接但更清潔的方式。

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;}
}

您可以將解析后的數據標記為私有,並以您希望的方式公開它。

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;
   }

}

我只是把它扔在一起,可能會使Coordinate類型不可變,並確保我覆蓋了Equals和==運算符的比較。

您可以實現IDataContractSurrogate接口

提供在序列化,反序列化以及XML模式文檔(XSD)的導出和導入期間由DataContractSerializer將一種類型替換為另一種類型所需的方法。

我沒有直接使用過JSon,但是您可以使用Location屬性獲取/設置的Coordinate屬性:

// 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]);
        }
}

當然你應該添加適當的邊界檢查等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM