[英]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; }
}
在序列化過程中可以以某種方式更改元素的名稱,因此項目被序列化為“2019-05-13”、“2019-05-14”等?
為此,您需要這個類結構:
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.");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.