委托类型属性如何序列化?

问题描述 投票:0回答:0

我正在尝试使用 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;
        }

我做错了什么?请建议。还有其他序列化委托的方法吗?

c# serialization datacontractserializer
© www.soinside.com 2019 - 2024. All rights reserved.