我正在编写一个WCF服务来替换当前的Web服务,并且我在处理一个需要返回的遗留复杂类型时遇到了问题。
不幸的是,我不能接触到任何代码,但是看看它们,所有的类都是可序列化的,当前的Web服务正在毫无问题地使用它。
每当我的客户机调用WCF服务时,它会收到一个通信异常,当我打开WCF跟踪时,我发现以下序列化错误:
键入“common.permission.applicationgroup”(数据协定名称)
应用程序组
:
http://schemas.datacontract.org/2004/07/Common.Permission
不应为“”。将静态未知的任何类型添加到已知类型列表中-例如,使用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有什么建议吗?