如何序列化集合以使用WCF发送它



我正试图通过WCF发送一个对象作为此方法中的参数:

[OperationContract]
bool SendProject(Project project);

如果我试着从客户端调用它,我就会得到这个:

尝试序列化参数项目时出错。InnerException消息为"Type"System.Collections.ObjectModel.Collection"1[[System.Collections.DictionaryEntry,mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089]"数据协定名称为"ArrayOfDictionaryEntry:http://schemas.datacontract.org/2004/07/System.Collections不应为"。考虑使用DataContractResolver或将任何未知类型静态添加到已知类型列表中,例如,通过使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型列表中。'。有关详细信息,请参阅InnerException。

我搜索了一些信息,我认为错误是我如何序列化一个类(来自Dr.WPF的类(;项目";类别:

#region ISerializable
public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
{
if (info == null)
{
throw new ArgumentNullException("info");
}

Collection<DictionaryEntry> entries = new Collection<DictionaryEntry>();
foreach (DictionaryEntry entry in _keyedEntryCollection)
entries.Add(entry);
info.AddValue("entries", entries);
}
#endregion ISerializable

问题是我不知道该把标签放在哪里;KnowType"或者如何正确序列化此字典以使用WCF将其作为参数发送。

谢谢!

我有一个解决方案,它不是那么干净,但却是一个解决办法。正如dbc所说,建议将DictionaryEntry更新为KeyValuePair<TKey,TValue>,但解决我问题的是在序列化所在的类中设置[KnownType(typeof(Collection<KeyValuePair<TypeX, TypeY>>))]

最新更新