XmlAttribute 不适用于 XmlArray

2024-04-24

我在使用 XmlSerializer 生成以下 XML 结构时遇到问题:

<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Name>This is root.</Name>
  <OtherValue>Otha.</OtherValue>
  <Shapes Name="This attribute is ignored!">
    <Circle>
      <Name>This</Name>
      <Value>Is</Value>
      <Whatever>Circle</Whatever>
    </Circle>
    <Square>
      <Name>And</Name>
      <Value>this is</Value>
      <Something>Square</Something>
    </Square>
  </Shapes>
</Root>

唯一的问题是属性<Shapes>没有被写入。 我用于序列化的类如下:

public class Root
{
    [XmlElement]
    public string Name { get; set; }

    [XmlElement]
    public string OtherValue { get; set; }

    [XmlArray("Shapes")]
    [XmlArrayItem("Circle", typeof(Circle))]
    [XmlArrayItem("Square", typeof(Square))]
    public ShapeList Shapes { get; set; }
}

public class ShapeList : List<Shape>
{
    // Attribute that is not in output
    [XmlAttribute]
    public string Name { get; set; }
}

public class Shape
{
    public string Name { get; set; }
    public string Value { get; set; }
}

public class Circle : Shape
{
   public string Whatever { get; set; }
}

public class Square : Shape
{
    public string Something { get; set; }
}

还有一个运行序列化的主要方法:

public static void Main(String[] args)
{
    var extraTypes = new Type[] {
        typeof(Shape),
        typeof(Square),
        typeof(Circle)
    };

    var root = new Root();
    root.Name = "This is root.";
    root.OtherValue = "Otha.";

    root.Shapes = new ShapeList()
    {
        new Circle() { Name = "This", Value="Is", Whatever="Circle" },
        new Square() { Name = "And", Value="this is", Something="Square" }
    };
    root.Shapes.Name = "This is shapes.";

    using (var sw = new StreamWriter("data.xml"))
    {
        var serializer = new XmlSerializer(typeof(Root), extraTypes);
        serializer.Serialize(sw, root);
    }
}
  • 为什么我没有得到Name的属性形状列表?
  • 如果用这种方法无法实现,还有其他简单的方法吗?

不对数组外部的属性进行处理;仅处理叶节点 - 集合只是:它们的内容。有一种方法可以做到,if你不介意让模型变得更复杂一点......

public class Root
{
    [XmlElement]
    public string Name { get; set; }

    [XmlElement]
    public string OtherValue { get; set; }

    [XmlElement("Shapes")]
    public ShapeContainer Shapes { get; set; }
}

public class ShapeContainer
{
    [XmlAttribute]
    public string Name { get; set; }

    private readonly List<Shape> items = new List<Shape>();
    [XmlElement("Circle", typeof(Circle))]
    [XmlElement("Square", typeof(Square))]
    public List<Shape> Items { get { return items; } }
}

public class Shape
{
    public string Name { get; set; }
    public string Value { get; set; }
}

public class Circle : Shape
{
    public string Whatever { get; set; }
}

public class Square : Shape
{
    public string Something { get; set; }
}

用法更改如下:

root.Shapes = new ShapeContainer();
root.Shapes.Items.Add(new Circle() { Name = "This", Value="Is", Whatever="Circle" });
root.Shapes.Items.Add(new Square() { Name = "And", Value = "this is", Something = "Square" });
root.Shapes.Name = "This is shapes.";
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XmlAttribute 不适用于 XmlArray 的相关文章

随机推荐

  • java方法中的可选参数

    我想制作一个需要 1 个必需参数和 1 个可选参数的方法 但我发现如何制作一个可选数组 方法是在参数 int b 中制作 但这是一个数组 我想制作它只是这个值是 null 或用户输入它 我可以通过创建 2 个同名的方法来实现它 但一个具有单
  • Android:如何将十字图标放在 autocompletetextView 顶部

    我在将十字按钮放在文本视图顶部时遇到问题 我正在使用 LinearLayout 并且它没有出现 而在 Framelayout 上它可以工作 但这并不能解决我的目的 我附上我的 XML 供参考 请帮助我解决这个问题
  • cppreference 使用术语“[对象的]标识”对于 c++11 和 c++17 来说是两种不同的含义吗?

    我以为我已经设法完全理解 在其他 SO 问题的帮助下 谢谢 C 17 关于值类别的更改 但现在我注意到这个问题 这表明我并不真正理解它们 在 C 11 中 对值类别有 具有同一性 可以从其中移动 的解释 并且 同一性 含义的定义仍然存在于参
  • 使用 Gremlin 查询语言获取边属性以及源和目标顶点 ID

    我正在尝试检索边缘属性作为值以及目标和源节点 ID 我当前的数据库如下所示 Edge id label outV inV name ID 0 edge 0 1 E 0 Nodes id label name ID 0 node A 0 1
  • 如何设置 SBT 构建以在 Jenkins 测试失败时返回零退出代码?

    当我通过 SBT 在 Jenkins 中运行 Specs2 测试时 一旦一个测试失败 构建就会被标记为失败 由于 Jenkins 通常会区分构建失败和测试失败 所以我想改变这一点 我知道 Jenkins 中的构建失败是通过调用 SBT 的退
  • 使用带有 Django CSRF 保护的 angular2 http 请求的正确方法是什么?

    在Angular1中可以通过配置 http provider来解决这个问题 喜欢 app config function httpProvider httpProvider defaults xsrfCookieName csrftoken
  • 对 VBO 中的特定三角形使用不同的纹理

    我有 9 个由三角形组成的四边形 如下所示 我在用着VBO存储有关它们的数据 它们的位置和纹理坐标 我的问题是 是否可以仅使用一个来使四边形 5 具有与其余四边形不同的纹理VBO and shader 绿色代表纹理 1 黄色代表纹理 2 到
  • 如何使用 opencv 从字节显示视频?

    我正在开展一个项目 其中我们使用无线电调制解调器将数据 视频和遥测 从无人机传输到地面站 我们需要做的是实时显示视频 并能够知道 C 中的每一块遥测数据对应哪一帧 数据被解封装为遥测和视频 mpeg4 字节 由于我对 OpenCV 有一些经
  • 在python中读取.xlsx格式

    我必须在 python 中每 10 分钟读取一次 xlsx 文件 做到这一点最有效的方法是什么 我尝试过使用 xlrd 但它不读取 xlsx 根据他的文档 但我不能这样做 获取Unsupported format or corrupt fi
  • Pulp.solvers.PulpSolverError:PuLP:无法执行glpsol.exe

    我是 python 和优化的新手 我收到一些错误 请帮我解决 我尝试在运行 Anaconda 3 的 PyCharm 中运行下面提到的代码 from pulp import x LpVariable x 0 3 y LpVariable y
  • 在不刷新页面的情况下如何使用ajax/jQuery显示数据库中的值

    通过jQuery ajax将数据插入数据库后 同时从数据库获取值而不刷新页面如何使用codeigniter显示数据库值 这是我的代码 Script
  • Go TCP 读取是非阻塞的

    我正在尝试用 Go 创建服务器和客户端 我已经成功地与服务器和客户端进行通信 但我遇到的问题是golang中的TCP读取是非阻塞的 我想知道 golang 中的读取是否有可能像 C 中的读取一样阻塞 谢谢 EDIT 这是服务器的源代码 fu
  • Brython 完全是客户端吗?

    我有一段用Python编写的代码 我想将该代码放在网页中 Brython 似乎是将这两件事粘合在一起的最简单方法 但我没有可以在服务器端实际运行代码的服务器 Brython 是否需要服务器端代码 或者我可以通过 例如 Dropbox 便宜地
  • 具有多个构造函数的 C++ init 成员变量

    通常构造函数应该是这样的 ctor1 SmallSim SmallSim mSimInit false mServersCreated false mTotalCPUTime 0 如果我有多个构造函数会怎样 在我看来 如果我从第二个构造函数
  • HttpSecurity、WebSecurity 和 AuthenticationManagerBuilder

    谁能解释一下何时覆盖configure HttpSecurity configure WebSecurity and configure AuthenticationManagerBuilder 配置 AuthenticationManag
  • 以编程方式创建 dataList

    我正在尝试以编程方式创建一个表 其中一个单元格包含数据列表 下面是片段 CustomTag phone form class PhoneForm extends PolymerElement observable List
  • CameraX 多个后置摄像头

    我正在尝试使用 CameraX 实现自定义相机应用程序 鉴于现在很多新设备都有多个后置摄像头 我也想将其包括在内 所以基本上 用户可以选择使用哪个相机 我已使用 addCameraFilter 选项尝试了以下操作 val cameraSel
  • 在 Android 项目中使用“compileOnly”范围?

    我在项目中使用 Gradle 2 12 或更高版本 以及适当版本的 Android Gradle 插件 Gradle 2 12 引入了compileOnly配置 那么为什么当我尝试使用它时会出现错误呢 找不到参数的compileOnly 方
  • 为什么 mongodump 不备份索引?

    在阅读 mongodump 文档时 我发现了此信息 mongodump 在其备份数据中仅捕获数据库中的文档 不包含索引数据 mongorestore 或 mongod 必须在恢复数据后重建索引 考虑到索引也是数据库难题的关键部分 并且它们需
  • XmlAttribute 不适用于 XmlArray

    我在使用 XmlSerializer 生成以下 XML 结构时遇到问题