У меня есть образец Json, и мне нужно сериализовать его в объекты C #.Я решил использовать для этой цели библиотеку Json.Net .Также мне нужно иметь классы C #, которые будут представлять этот Json.Для создания классов может быть использован генератор классов 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 может справиться с этим классом.
Мой вопрос заключается в том, какой генератор классов предпочтительнее использовать и каковы преимущества и недостатки использования каждого из них.Тип создаваемых классов?
Спасибо за ваши предложения.