我有示例Json,我需要將它序列化爲C#對象。我決定爲此使用Json.Net庫。另外我需要有C#類來代表這個Json。創建類可以使用Json C# class generator。我們有兩個選擇。 「創建屬性」和生成的類將是這樣的:爲Json對象生成的C#類的好處和缺點
public class Address
{
private JObject __jobject;
public Address(JObject obj)
{
this.__jobject = obj;
}
public string street_address
{
get
{
return JsonClassHelper.ReadString(JsonClassHelper.GetJToken<JValue>(__jobject, "street_address"));
}
}
public string city
{
get
{
return JsonClassHelper.ReadString(JsonClassHelper.GetJToken<JValue>(__jobject, "city"));
}
}
public string state_province
{
get
{
return JsonClassHelper.ReadString(JsonClassHelper.GetJToken<JValue>(__jobject, "state_province"));
}
}
public string zip_postal_code
{
get
{
return JsonClassHelper.ReadString(JsonClassHelper.GetJToken<JValue>(__jobject, "zip_postal_code"));
}
}
}
,另一個選項是「生成預填充的只讀域」和類看起來就像
public class Address
{
public Address(JObject obj)
{
this.street_address = JsonClassHelper.ReadString(JsonClassHelper.GetJToken<JValue>(obj, "street_address"));
this.city = JsonClassHelper.ReadString(JsonClassHelper.GetJToken<JValue>(obj, "city"));
this.state_province = JsonClassHelper.ReadString(JsonClassHelper.GetJToken<JValue>(obj, "state_province"));
this.zip_postal_code = JsonClassHelper.ReadString(JsonClassHelper.GetJToken<JValue>(obj, "zip_postal_code"));
}
public readonly string street_address;
public readonly string city;
public readonly string state_province;
public readonly string zip_postal_code;
}
這兩個生成的類依賴JObject和JsonClassHelper。但這些類不能與JsonSerializer用於像
var ro = jsonSerializer.Deserialize<RootObject>(reader);
我們可以通過JObject.Load方法
var ro = new RootObject(Newtonsoft.Json.Linq.JObject.Load(reader));
另一種方式創建這些類的對象是使用在線json2csharp轉換器和類看起來像
public class Address
{
public string street_address { get; set; }
public string city { get; set; }
public string state_province { get; set; }
public string zip_postal_code { get; set; }
}
JsonSerializer可以處理這個類。
我的問題是什麼類生成器是最好使用,什麼是使用每種類型的生成的類的好處和缺點?
謝謝你的建議。
謝謝你的建議。我同意你使用DataContractJsonSerializer更容易,但它也有更多限制。例如日期和時間字段的格式。 Json.Net支持更多可以成功解析的格式。這很重要,因爲該服務將發佈給第三方。 – paramosh 2012-02-10 15:27:22