【问题标题】:c# serialize to xml my own type as attributec#序列化为xml我自己的类型作为属性
【发布时间】:2017-08-08 22:13:06
【问题描述】:

我有课,是这样的:

Class1:
  List<Class2> A;
  string B;

Class2:
  Class3 A2;
  string B2;

Class3:
  string A3;
  string B3;

我想将其序列化为 XML,如下所示:

<Class1>
  <Class2 A3="x" B3="y" B2="z" />
  <Class2 A3="x2" B3="y2" B2="z2" />
  ...
  <B> abc </B>
</Class1>

当我在 Class2 字段中设置为 XmlAttribute 时,我得到 unhandler 异常 System.InvalidOperationException
有什么办法吗? 编辑:好的,我提供的细节更少。我有问题如何序列化我自己的类型列表,看起来像。我可以将其序列化为 xml,例如:

<Class1>
  <A>
    <Class2 B2="x">
      <Class3 A3="x" B3="x"/>
    </Class2>
    <Class2 B2="x">
      <Class3 A3="x" B3="x"/>
    </Class2>
  </A>

但我希望将 class3 作为属性而不使用名称 class 3(仅来自此类的字段),并且我不想列出,只有列出的元素具有名称 Class2。我不确定这是否可以理解...

【问题讨论】:

  • 我猜这个异常有一个消息,甚至可能是一个内部异常。你能贴出来吗?要序列化班级成员,他们必须是公开的!非常重要。
  • 我编辑了我的问题并添加了一些细节。
  • 我猜你将不得不使用XElement手工构建它
  • 或者快速而肮脏的将XmlIgnore添加到Class3属性并在Class2中反映子属性。但这实际上只是一种快速而肮脏的方式。

标签: c# xml


【解决方案1】:

你能把 A3 和 B3 的道具移到 Class2 吗?

Class1:
 [XmlElement("Class2")]
 List<Class2> A;
 [XmlElement]
 string B;

Class2:
 [XmlAttribute]
 string A3;
 [XmlAttribute]
 string B3;
 [XmlAttribute]
 string B2;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-27
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    相关资源
    最近更新 更多