我正在尝试使用 DataContractSerializer 将委托序列化为 xml 文件。 它因错误而失败
System.Runtime.Serialization.SerializationException:键入“System.DelegateSerializationHolder+DelegateEntry”,数据协定名称为“DelegateSerializationHolder.DelegateEntry:http://schemas.datacontract.org/2004/07/System”。如果您正在使用 DataContractSerializer 或将任何静态未知类型添加到已知类型列表中,请考虑使用 DataContractResolver - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给序列化程序的已知类型列表中。
所以,我写了类似下面的 DataContractResolver,它失败了,因为 System.ArgumentException:“<>c”中的名称字符无效。 '<' character, hexadecimal value 0x3C, cannot be included in a name.
public override bool TryResolveType(Type type, Type declaredType, DataContractResolver knownTypeResolver,
out XmlDictionaryString typeName, out XmlDictionaryString typeNamespace)
{
var name = type.Name;
var nameSpace = type.Namespace;
typeName = new XmlDictionaryString(XmlDictionary.Empty, name, 0);
if (nameSpace != null)
{
typeNamespace = new XmlDictionaryString(XmlDictionary.Empty, nameSpace, 0);
if (!dictionary.ContainsKey(type.Name)) dictionary.Add(name, typeName);
if (type.Namespace != null && !dictionary.ContainsKey(type.Namespace))
dictionary.Add(nameSpace, typeNamespace);
return true;
}
typeName = null;
typeNamespace = null;
return false;
}
我做错了什么?请建议。还有其他序列化委托的方法吗?