私は代理クラスとカスタムに行きますJsonConverter
:
public class HardToSerializeSurrogate
{
public string IAmNotTheProblem { get; set; }
public string ButIAm { get; set; }
}
public class HardToSerializeConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(HardToSerialize);
}
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)
{
var item = (HardToSerialize)value;
// fill the surrogate with the values of the original object
var surrogate = new HardToSerializeSurrogate();
surrogate.IAmNotTheProblem = item.IAmNotTheProblem;
serializer.Serialize(writer, surrogate);
}
}
使用法:
static void Main(string[] args)
{
var hardToSerialize = new HardToSerialize() { IAmNotTheProblem = "Foo" };
var s = JsonConvert.SerializeObject(hardToSerialize,
new HardToSerializeConverter());
}
もちろん、オブジェクトJsonConverter
のリストまたはこの型を含むオブジェクトをシリアル化する必要がある場合は、カスタムを実装する価値があります。
一方、毎回 1 つのオブジェクトをシリアル化するだけの場合は、オブジェクトの代理コピーを作成し、カスタム を実装せずにそれをシリアル化します。HardToSerialize
HardToSerialize
JsonConverter