我有示例 Json,我需要将其序列化为 C# 对象。我决定为此目的利用杠杆Json.Net http://json.codeplex.com/图书馆。我还需要有 C# 类来表示这个 Json。可以使用创建类Json C# 类生成器 http://jsonclassgenerator.codeplex.com/。我们有两个选择。 “创建属性”和生成的类将如下所示:
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 http://json2csharp.com/转换器和类看起来像
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 可以处理这个类。
我的问题是最好使用什么类生成器以及使用每种类型的生成类的优点和缺点是什么?
谢谢你的建议。