c# - 从子类中获取元素名称
问题描述
从此代码生成 XML 时:
internal class Program
{
public static void Main(string[] args)
{
using (StreamWriter myWriter = new StreamWriter(@"C:\Users\tomas\Documents\foo.xml", false))
{
var myFoo = new Foo();
myFoo.Bar = new BarChildOne();
XmlSerializer mySerializer = new XmlSerializer(typeof(Foo));
mySerializer.Serialize(myWriter, myFoo);
}
}
}
public class Foo
{
public BarBase Bar { get; set; }
}
[XmlInclude(typeof(BarChildOne))]
[XmlInclude(typeof(BarChildTwo))]
public abstract class BarBase
{
public string Name { get; set; }
}
[XmlRoot(ElementName = "BarChildOne")]
public class BarChildOne : BarBase
{
public BarChildOne()
{
this.Name = "BarChildOne";
}
}
[XmlRoot(ElementName = "BarChildTwo")]
public class BarChildTwo : BarBase
{
public BarChildTwo()
{
this.Name = "BarChildTwo";
}
}
一个这样的 XML 被创建:
<?xml version="1.0" encoding="utf-8"?>
<Foo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Bar xsi:type="BarChildOne">
<Name>BarChildOne</Name>
</Bar>
</Foo>
但是,我希望元素名称为BarChildOne,如子类中定义的那样,而不是Bar。
当前:<Bar xsi:type="BarChildOne">
预期:<BarChildOne>
如果派生类是,BarChildTwo
那么预期的名称是<BarChildTwo>
.
使用内置的 XML 序列化程序可以做到这一点吗?
解决方案
更新 Foo 中的变量名称:
public class Foo
{
public BarBase BarChildOne { get; set; }
}
并在序列化中更新引用变量的名称:
using (StreamWriter myWriter = new StreamWriter(@"C:\temp\foo.xml", false))
{
var myFoo = new Foo();
myFoo.BarChildOne/**/ = new BarChildOne();
XmlSerializer mySerializer = new XmlSerializer(typeof(Foo));
mySerializer.Serialize(myWriter, myFoo);
}
产生请求的结果:
我希望元素名称为 BarChildOne,如子类中定义的那样,而不是 Bar。
<?xml version="1.0" encoding="utf-8"?>
<Foo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<BarChildOne xsi:type="BarChildOne">
<Name>BarChildOne</Name>
</BarChildOne>
</Foo>
推荐阅读
- mysql - MySQL 5.7 - 错误 sql_mode=only_full_group_by
- python - 如何使用 python 脚本获取 MacOS 笔记本电脑的电池百分比?
- python - python logging 模块默认在哪里写日志?
- php - Laravel Valet 安装后无法解析站点
- visual-studio - 用于颠覆和/或 BitBucket 的 VS2017 SSIS 版本控制
- sql - 基于两个不同的连接从表中返回两条数据
- mysql - 提高一对多连接的性能
- bash - 如何在 Bash 中将带有空格的数组作为函数参数传递
- sql - 如何限制选择每台设备的最后几天结果
- c - C如何在无符号整数指针之间进行异或