如何使JsonConverter写密钥/值而不是密钥/数组
问题描述:
我有类包含标识符,就像这样;如何使JsonConverter写密钥/值而不是密钥/数组
public class Type1
{
public int Id { get; set; }
// other properties
}
public class Type2
{
public int Id { get; set; }
// other properties
}
public class ParentType
{
[JsonConverter(typeof(IdConverter))]
public Type1 Instance1 { get; set; }
[JsonConverter(typeof(IdConverter))]
public Type2 Instance2 { get; set; }
}
我想序列化的ParentType
到JSON,但我并不需要连载全班。我只需要Id,因为它唯一标识了实例。 IdConverter是这样实现的;
class IdConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
PropertyInfo pi = objectType.GetProperty("Id");
return (pi != null && pi.PropertyType == typeof(int));
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
JToken t = JToken.FromObject(value);
if (t.Type != JTokenType.Object)
{
t.WriteTo(writer);
}
else
{
int id = (int)value.GetType().GetProperty("Id").GetValue(value);
JObject o = JObject.FromObject(new { Id = id });
o.WriteTo(writer);
}
}
}
这工作正常,但输出Json格式不理想;
{
"Instance1": {
"Id": 1
},
"Instance2": {
"Id": 2
}
}
我更喜欢它看起来更像这样;
{
"Instance1": 1,
"Instance2": 2
}
有什么办法可以达到这个目的吗?
答
对不起,我自己做过;
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
JToken t = JToken.FromObject(value);
if (t.Type != JTokenType.Object)
{
t.WriteTo(writer);
}
else
{
int id = (int)value.GetType().GetProperty("Id").GetValue(value);
writer.WriteValue(id);
}
}
结果;
{
"Instance1": 1,
"Instance2": 2
}