0
私はこのような識別子を含むクラスを持っています。キー/配列ではなく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; }
}
私はJSONにParentType
をシリアライズしたいが、私はクラス全体をシリアル化する必要はありません。インスタンスを一意に識別するため、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
}
これを実現する方法はありますか?