序列化不接受我的 KnownTypeAttribute,为什么

本文关键字:为什么 KnownTypeAttribute 我的 不接受 序列化 | 更新日期: 2023-09-27 18:37:22

我遇到了序列化问题。我的 Silverlight 应用程序不需要业务对象中的某个属性,并且不知道该怎么做。以前我已经通过设置一个 KnownTypeAttribute 解决了这个问题,如下例所示,但在这种情况下它不起作用。

我曾经这样解决它:

[DataContract(Name = "baseClass")]
public class baseClass { }
[DataContract(Name = "busObj1")]
public class busObj1 : baseClass { }
[DataContract(Name = "busObj2")]
[KnownType(typeof(busObj1))]
public class busObj2 : baseClass
{
    public busObj1 myObj { get; set; }
}

唯一知道的区别是我的结构略有不同,如下所示:

[DataContract(Name = "baseClass")]
public class baseClass { }
[DataContract(Name = "busObj1")]
public class busObj1 : baseClass { }
[DataContract(Name = "busObj2")]
[KnownType(typeof(busObj1))]
public class busObj2 : baseClass
{
    public busObj1 myObj { get; set; }
}
// This is the class that I want to send via WCF and that cannot be serialized
// because the serializer doesn't expect busObj1.
[DataContract(Name = "busObj3")]
public class busObj3 : busObj2 { }

我非常感谢任何可能出错的想法!

问候,克拉斯

序列化不接受我的 KnownTypeAttribute,为什么

您需要将已知类型属性放在基对象上:

[DataContract(Name = "baseClass")]
[KnownType(typeof(busObj1))]
[KnownType(typeof(busObj2))]
[KnownType(typeof(busObj3))]
[KnownType(typeof(busObj4))]
public class baseClass { }
[DataContract(Name = "busObj1")]
public class busObj1 : baseClass { }
[DataContract(Name = "busObj2")]
public class busObj2 : baseClass { }
[DataContract(Name = "busObj3")]
public class busObj3 : busObj1
{
    public busObj2 myObj { get; set; }
}
[DataContract(Name = "busObj4")]
public class busObj4 : busObj3 { }

或者,如果您不想用这些属性污染您的域模型,您也可以在 web.config 中执行此操作,或者在服务合同中使用 ServiceKnownType 属性。