我想序列化某些類型的對象時,在JSON中有一個類型名稱的屬性。 我寫了一個轉換器:如何使用Newtonsoft.Json將對象序列化爲帶有類型信息的json?
public class TypeInfoConverter : JsonConverter {
private readonly IEnumerable<Type> _types;
public TypeInfoConverter(IEnumerable<Type> types) {
Contract.Requires(types != null);
_types = types;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) {
var jObject = JObject.FromObject(value, serializer);
jObject.AddFirst(new JProperty("Type", value.GetType().Name));
jObject.WriteTo(writer);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) {
return serializer.Deserialize(reader, objectType);
}
public override bool CanConvert(Type objectType) {
return _types.Any(t => t.IsAssignableFrom(objectType));
}
}
但是,當我試圖序列化對象我在這裏有一個無限遞歸: var jObject = JObject.FromObject(value, serializer);
因爲我用JsonSerializer的同一實例這是與轉換器,這是顯而易見的。
如何防止使用此轉換器,但我想使用其他轉換器爲此串行器配置?
類型,我想序列:
public interface ITaskResult {
}
public class UserHasRejectedOffer : ITaskResult {
public string Message { get; set; }
}
public class UserHasFilledForm : ITaskResult {
public string FormValue1 { get; set; }
public string Formvalue2 { get; set; }
}
...
後的你正在試圖序列類型的代碼。 – Aybe