如何序列化 json 以显示 属性 值而不是 属性 名称?
How to serialize json in order to display property value instead of property name?
我正在尝试找到一种方法将对象序列化为以下格式的 json 字符串,这样我就可以满足项目要求
{
"id": 123456,
"los": {
"2019-05-13": [
{
"currency": "EUR",
"guests": 2,
"price": [
100,
200
]
},
{
"currency": "EUR",
"guests": 3,
"price": [
150,
250
]
}
],
"2019-05-14": {
"currency": "EUR",
"guests": 2,
"price": [
300
]
}
},
}
我创建了这些模型 类:
public class Rootobject
{
public Los los { get; set; }
public int Id { get; set; }
}
public class Los
{
public Item[] items{ get; set; }
}
public class Item
{
public DateTime date {get;set;}
public string currency { get; set; }
public int guests { get; set; }
public int[] price { get; set; }
}
有可能在序列化期间以某种方式更改元素的名称,因此 Item 被序列化为“2019-05-13”、“2019-05-14”等?
为此,您需要这个 class 结构:
public class Rootobject
{
public int Id { get; set; }
[JsonConverter(typeof(CustomItemConverter))]
public Dictionary<DateTime, Item[]> Los { get; set; }
}
public class Item
{
[JsonIgnore]
public DateTime Date { get; set; }
public string Currency { get; set; }
public int Guests { get; set; }
public int[] Price { get; set; }
}
和自定义转换器:
public class CustomItemConverter : JsonConverter
{
public override bool CanRead => false;
public override bool CanConvert(Type objectType)
{
return objectType == typeof(Dictionary<DateTime, Item[]>);
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
var dictionary = (Dictionary<DateTime, Item[]>)value;
writer.WriteStartArray();
foreach (var item in dictionary)
{
writer.WriteStartObject();
writer.WritePropertyName(item.Key.Date.ToString("yyyy-MM-dd"));
serializer.Serialize(writer, item.Value);
writer.WriteEndObject();
}
writer.WriteEndArray();
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException("Unnecessary because CanRead is false. The type will skip the converter.");
}
}
我正在尝试找到一种方法将对象序列化为以下格式的 json 字符串,这样我就可以满足项目要求
{
"id": 123456,
"los": {
"2019-05-13": [
{
"currency": "EUR",
"guests": 2,
"price": [
100,
200
]
},
{
"currency": "EUR",
"guests": 3,
"price": [
150,
250
]
}
],
"2019-05-14": {
"currency": "EUR",
"guests": 2,
"price": [
300
]
}
},
}
我创建了这些模型 类:
public class Rootobject
{
public Los los { get; set; }
public int Id { get; set; }
}
public class Los
{
public Item[] items{ get; set; }
}
public class Item
{
public DateTime date {get;set;}
public string currency { get; set; }
public int guests { get; set; }
public int[] price { get; set; }
}
有可能在序列化期间以某种方式更改元素的名称,因此 Item 被序列化为“2019-05-13”、“2019-05-14”等?
为此,您需要这个 class 结构:
public class Rootobject
{
public int Id { get; set; }
[JsonConverter(typeof(CustomItemConverter))]
public Dictionary<DateTime, Item[]> Los { get; set; }
}
public class Item
{
[JsonIgnore]
public DateTime Date { get; set; }
public string Currency { get; set; }
public int Guests { get; set; }
public int[] Price { get; set; }
}
和自定义转换器:
public class CustomItemConverter : JsonConverter
{
public override bool CanRead => false;
public override bool CanConvert(Type objectType)
{
return objectType == typeof(Dictionary<DateTime, Item[]>);
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
var dictionary = (Dictionary<DateTime, Item[]>)value;
writer.WriteStartArray();
foreach (var item in dictionary)
{
writer.WriteStartObject();
writer.WritePropertyName(item.Key.Date.ToString("yyyy-MM-dd"));
serializer.Serialize(writer, item.Value);
writer.WriteEndObject();
}
writer.WriteEndArray();
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException("Unnecessary because CanRead is false. The type will skip the converter.");
}
}