[英]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.