나는 대리 클래스와 사용자 정의 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);
}
}
사용법 : 당신이 직렬화해야하는 경우 사용자 정의 JsonConverter
을 구현
물론
static void Main(string[] args)
{
var hardToSerialize = new HardToSerialize() { IAmNotTheProblem = "Foo" };
var s = JsonConvert.SerializeObject(hardToSerialize,
new HardToSerializeConverter());
}
정말 가치가있다 HardToSerialize
개체 목록 또는이 형식을 포함하는 개체
한편, HardToSerialize
개체를 매번 serialize하려는 경우 개체의 대리 복사본을 만든 다음 사용자 지정 JsonConverter
을 구현하지 않고 개체를 직렬화하면됩니다.
NotImplementedException을 throw하는 속성이있는 모든 개체에서이 기능을 사용하고 싶습니다. 나는 그 질문을 갱신했다. –
@JesperPalm : 구현되지 않은 속성이있는 클래스는 예외가 아니어야합니다. 그것들은 당신이 원하고 원하지 않는 수업에 대해 더 많은 통제권을 부여하기 때문에 각자의 대리자와 함께 갈 것입니다. 실제로 Error 이벤트를 처리하면 예외가 발생하고 catch되기 때문에 성능이 저하 될 수 있습니다. – digEmAll