通过WCF进行抽象类属性序列化的问题

时间:2011-09-12 15:25:44

标签: c# .net silverlight wcf serialization

我正在尝试让一个类通过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; }
}

为什么不工作?

2 个答案:

答案 0 :(得分:3)

[KnownType]属性需要传递静态类型,必须在编译时知道:

[DataContract]
[KnownType(typeof(SomeChildOfBusinessObject))]
[KnownType(typeof(SomeOtherChildOfBusinessObject))]
public class BusinessObject
{
    ...
}

如果您想注册动态已知类型,可以查看following blog post

答案 1 :(得分:0)

如果由knowntype继承,则无法将未知类型传输到客户端。将ur类型转换为基类时,该对象仍然保留为子类,因此无法传输或序列化。您可以使用refecltion将动态类型注册为已知类型,但这又可能是反序列化动态类型的问题。