【问题标题】:Serializing XSD.exe-created object model. How to set XmlAnyAttribute values序列化 XSD.exe 创建的对象模型。如何设置 XmlAnyAttribute 值
【发布时间】:2015-05-11 06:32:23
【问题描述】:

我有一个由xsd.exe 创建的对象模型,它有这个成员:

XSD:

<xs:element maxOccurs="unbounded" name="Foo">
    <xs:complexType>
        <xs:attribute name="bar" type="xs:string" />
        <xs:anyAttribute />
    </xs:complexType>
</xs:element>

生成的 C#(删节)

[XmlAnyAttribute]
public XmlAttribute[] AnyAttr { get... set... }

反序列化很好,当我加载这样的 XML 文件时会填充此属性:

<Foo bar="baz" one="one" two="three" four="ten" />

问题是,我该如何序列化?我不能简单地设置fooInstance.AnyAttr = new XmlAttribute[] 然后创建每个XmlAttribute 对象以进入AnyAttr 集合,因为XmlAttribute 构造函数是内部的,只能由XmlDocument.CreateAttribute 创建。但是,在当前上下文中,没有可用的 XmlDocument 实例。

那么如何创建一个适合与[XmlAnyAttribute] 一起使用的XmlAttribute 实例?

【问题讨论】:

  • 我发现你可以这样做 XmlAttribute attr = new XmlDocument().CreateAttribute("name"); attr.Value = "your_content_here"; 但如果属性来自另一个命名空间(在我的情况下是这样),这还不够。如果您找到解决方案,请进行更新。
  • @Chris 我使用了XmlDocument 的虚拟实例,因为我的 XML 文件有一个默认模式,所以它对我有用。很抱歉,我无法提供更多帮助。

标签: c# xml xsd system.xml


【解决方案1】:

事实证明,您可以使用 XmlDocument 的虚拟实例来创建 XML DOM 组件,并且效果很好:

FooElement foo = new FooElement();
foo.bar = "baz";

XmlDocument dummy = new XmlDocument();
foo.AnyAttr = new XmlAttribute[] {
    dummy.CreateAttribute("one", "one"),
    dummy.CreateAttribute("two", "three"),
    dummy.CreateAttribute("four", "ten")
};

【讨论】:

    猜你喜欢
    • 2020-12-03
    • 2015-10-20
    • 2013-06-03
    • 1970-01-01
    • 2014-02-16
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    相关资源
    最近更新 更多