【发布时间】:2020-01-10 13:37:10
【问题描述】:
例如我有三个类
public class A
{
public string Abc { get; set; }
}
public class B
{
public string Xyz { get; set; }
}
public class C
{
private object itemField;
[XmlElement("A", typeof(A))]
[XmlElement("B", typeof(B))]
public object Item
{
get
{
return itemField;
}
set
{
itemField = value;
}
}
}
我正在尝试序列化 C 类的一个实例
var b = new B
{
Xyz = "123123"
};
var c = new C
{
Item = b
};
var serializer = new XmlSerializer<C>();
var aaa = serializer.Serialize(c);
那么输出就是
-C
--A
---Xyz
----123123
---/Xyz
--/A
-/C
但我期待
-C
--B
---Xyz
----123123
---/Xyz
--/B
-/C
我该怎么做? (我将 amazon mws xsd 转换为带有 xsd.exe 的类,并且一些输出类类似于 C 类,因此在尝试序列化这些类时遇到了麻烦。)
我正在使用 net framework 4.6.1 并用于序列化 XSerializer(nuget.org/packages/XSerializer/0.4.2)。
*** 编辑:我发现了问题,问题不在于序列化程序。 “xsd.exe”在转换 xsd 文件时在多维数组上出错。我编辑了序列化属性的类并且它起作用了。 示例:
// I changed "[XmlArrayItem("Name", typeof(TypeName))]" To that:
[XmlArrayItem("Name", typeof(TypeName[]))]
public TypeName[][] PropName { get; set; }
谢谢大家
【问题讨论】:
-
类被另一个类继承时使用的类型。所以你需要 1) public class A : C 2) public class B: C
-
什么是
XmlSerializer<T>?请参阅minimal reproducible example。 -
我已经在“公共对象项”属性上使用了 [XmlElement("",typeof())]。我需要通过它的类型名称序列化“项目”属性。 (如果“项目”的类型是 A 则 A 标记,当类型 B 则 B 标记等不是项目标记)
-
@Sinatr 对不起,我的错。我正在使用 net framework 4.6.1 和序列化 XSerializer(nuget.org/packages/XSerializer/0.4.2)
-
那么这可能是
XSerializer的错误。如果我使用 .Net 中内置的XmlSerializer序列化您的课程,那么我会得到想要的结果,请参阅 dotnetfiddle.net/rHGcux。
标签: c# xml serialization xsd amazon-mws