c# - 如何强制对同名的派生类型进行 XML 反序列化?

标签 c# serialization xml-serialization deserialization

我无法修改库中提供的类型,例如:

namespace BaseNamespace
{
    public class A
    {
        public string Foo { get; set; }
    }
}

我还有一个名为 SomeOtherNamespace.A"的类,它派生自 BaseNamespace.A,如下所示:

namespace SomeOtherNamespace
{
    public class A : BaseNamespace.A
    {
        public string DoSomething() {}
    }
}

我从网络服务中收到了一个 XML 负载。

我想反序列化 XML,以便最终得到一个 SomeOtherNamespace.A 对象。但是,当我运行以下代码时

string xml = "<A Foo=\"test\"></A>";

XmlSerializer serializer = new XmlSerializer(typeof(A));

StringReader reader = new StringReader(xml);

A obj = serializer.Deserialize(reader) as A;

我得到一个错误:

Types 'BaseNamespace.A' and 'SomeOtherNamespace.A' both use the XML type name, 'A', from namespace ''. Use XML attributes to specify a unique XML name and/or namespace for the type.

问题:在不修改类 BaseNamespace.A 的情况下,如何强制反序列化到我的派生类型 SomeOtherNamespace.A?

最佳答案

将您的 SomeOtherNamespace.A 重命名为

namespace SomeOtherNamespace
{
    public class AAA : BaseNamespace.A
    {
        public string DoSomething() {}
    }

并创建序列化器为

XmlRootAttribute root = new XmlRootAttribute("A");
XmlSerializer serializer = new XmlSerializer(typeof(AAA),root);

关于c# - 如何强制对同名的派生类型进行 XML 反序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11095443/

相关文章:

c# - 当 C# 对象不可 JSON 序列化时

java - 在实现 Serialized 的类中声明 private static final long serialVersionUID = xxxxxxxxL 有什么区别

c# - XML 序列化 DateTime 的默认格式

java - 不使用反射的java xml序列化生成器

C# 在线程中运行 InvokeMember

c# - XAML 设计未在 Visual Studio 中加载

c# - 引入 IEqualityComparer<T> 是出于以下原因吗?

c# - 读取从 Java 序列化到 C# 的 BigInteger

C# 整数类型不一致

c# - 带有 XML 序列化的不需要的属性名称