我正在尝试反序列化JSON格式的对象集合,它们有一个共同的父类,但是当ServiceStack反序列化我的请求时,我得到了我的集合中父类的类型而不是每个单独的子类的所有元素。是否可以创建自定义反序列化器并避免ServiceStack自动反序列化。
示例:
class Canine {
public Types Type { get; set; }
}
class Dog : Canine {
public Dog() {
Type = Types.Dog;
}
}
class Wolf : Canine {
public Wolf() {
Type = Types.Wolf;
}
}
public enum Types {
Canino = 1,
Perro = 2,
Lobo = 3
}
public class CanineService : Service {
public CanineResponse Post(Canine request) {
return new Canine().GetResponse(request);
}
}
我用json.NET
反序列化这个JSON public class CanineConverter : JsonConverter {
public override bool CanConvert(Type objectType) {
return typeof(Canine).IsAssignableFrom(objectType);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) {
var item = JObject.Load(reader);
switch (item["Type"].Value<int>()) {
case 2: return item.ToObject<Dog>();
case 3: return item.ToObject<Wolf>();
}
return item["Type"].Value<Types>();
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) {
throw new NotImplementedException();
}
}
答案 0 :(得分:0)
请参阅这个答案,了解为什么inheritance should avoided in DTO's以及如何启用ServiceStack来保留类型信息,这些信息只为绝对需要它的类型发出后期绑定的.NET类型信息,即Interfaces
,合并object
类型或abstract
类。
解决方案是将Canine的基类更改为抽象类型:
abstract class Canine
{
public Types Type { get; set; }
}