c# - 混合类型属性序列化为 C# 中的 xml
问题描述
例如我有三个班级
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; }
谢谢大家
解决方案
我得到了想要的结果XmlSerializer
。命名空间System.Xml.Serialization
var writer = new XmlSerializer(typeof(C));
var file = File.Create(strfilepath);
writer.Serialize(file, c);
file.Close();
输出
<?xml version="1.0"?>
<C xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<B>
<Xyz>123123</Xyz>
</B>
</C>
推荐阅读
- c# - 使用 websocket 连接两个设备
- angular - 如何在角度材料中获取复选框数据
- go - 在 golang 中加载语言 JSON 文件的最佳方法是什么?
- python - Django 查询引擎 - 从 1.11 迁移到 2.0
- node.js - 超级账本结构设置问题
- php - 过滤数据后从表中提交值无法正常工作
- mysql - 根据 SQL 中的特定客户时间获取及时交货的数量
- database-migration - 没有 alembic_version 表的 Python alembic 离线模式
- c# - .Net Core Dependency Injection 获取两个工厂方法生成的不同实例
- c++ - c ++ wcout停止输出,wofstream在一些调用后也停止输出