我正在尝试让一个类通过WCF。除了我没有序列化的抽象类之外,这些都没有问题。 有什么办法可以避免吗?
[DataContract]
[KnownType("GetKnownTypes")]
public class BusinessObject
{
public static Type[] GetKnownTypes()
{
// only returns the different types my "Field" abstract class can take
return Services.WCFRIAKnownTypesHelperService.FieldsKnownTypes.ToArray();
}
[DataMember]
public String ID { get; set; }
[DataMember]
public List<Section> Sections { get; set; }
[DataMember]
public List<Field> Fields { get; set; }
}
现在是我的实地课
[DataContract]
public abstract class Field
{
[DataMember]
public String FieldID { get; set; }
[DataMember]
public String Title { get; set; }
[DataMember]
public Object Content { get;set; }
}
为什么不工作?
答案 0 :(得分:3)
[KnownType]
属性需要传递静态类型,必须在编译时知道:
[DataContract]
[KnownType(typeof(SomeChildOfBusinessObject))]
[KnownType(typeof(SomeOtherChildOfBusinessObject))]
public class BusinessObject
{
...
}
如果您想注册动态已知类型,可以查看following blog post。
答案 1 :(得分:0)
如果由knowntype继承,则无法将未知类型传输到客户端。将ur类型转换为基类时,该对象仍然保留为子类,因此无法传输或序列化。您可以使用refecltion将动态类型注册为已知类型,但这又可能是反序列化动态类型的问题。