【发布时间】:2009-02-19 18:50:52
【问题描述】:
我正在编写 WCF 服务来替换当前的 Web 服务,但我遇到了需要返回的旧复杂类型之一的问题。
不幸的是,我无法触摸任何代码,但查看它们所有类都是可序列化的,并且当前的 Web 服务正在使用它没有问题。
每当我的客户端调用 WCF 服务时,它都会收到通信异常,当我打开 WCF 跟踪时,我发现了以下序列化错误:
不应使用数据协定名称“ApplicationGroup:http://schemas.datacontract.org/2004/07/Common.Permission”键入“Common.Permission.ApplicationGroup”。将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给 DataContractSerializer 的已知类型列表中。
我要返回的类型是 ApplicationPrincipal,但它似乎在子类型上掉了下来。以下是这些类的外观:
我要返回的类型:
[Serializable]
[TypeConverter(typeof(ExpandableObjectConverter))]
public class ApplicationPrincipal :
IPrincipal, ISupportInitialize, IDeserializationCallback, IFormattable
{
private ApplicationIdentity m_identity;
private ApplicationGroupCollection m_groups;
private ConditionDictionary m_roleConditions;
这里是 ApplicationGroupCollection:
[Serializable]
public class ApplicationGroupCollection :
IList, IEnumerable, IFormattable, ISupportInitialize,
IDeserializationCallback, ICloneable, ICustomTypeDescriptor
{
/// <summary>
/// Occurs when a value is being changed in the collection.
/// </summary>
[field:NonSerialized]
public event CollectionChangeEventHandler CollectionChanging;
/// <summary>
/// Occurs when a value has been changed in the collection.
/// </summary>
[field:NonSerialized]
public event CollectionChangeEventHandler CollectionChanged;
最后是应用程序组:
[Serializable]
[TypeConverter(typeof(ExpandableObjectConverter))]
public class ApplicationGroup :
ICloneable, ISupportInitialize, IDeserializationCallback, IFormattable
{
private int m_groupID;
private string m_groupName;
private string m_groupDesc;
private ConditionDictionary m_roleConditions;
关于为什么 WCF 不能序列化 ApplicationGroup 有什么建议吗?
【问题讨论】:
标签: c# wcf serialization