【发布时间】:2012-03-03 00:11:57
【问题描述】:
我有示例 Json,我需要将其序列化为 C# 对象。我决定为此目的利用Json.Net 库。我还需要有代表这个 Json 的 C# 类。可以使用Json C# class generator 创建类。我们有两个选择。 “创建属性”和生成的类将如下所示:
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 可以处理这个类。
我的问题是什么类生成器更适合使用,使用每种类型的生成类有什么好处和缺点?
谢谢你的建议。
【问题讨论】:
标签: c# asp.net json serialization code-generation