【问题标题】:c# and XML Deserialization : what about substitutiongroups used for handling globalizationc# 和 XML 反序列化:用于处理全球化的替代组怎么样
【发布时间】:2010-12-28 17:37:23
【问题描述】:

我有以下架构:

<xs:element name="Company" type="xs:string" />
<xs:element name="Companhia" substitutionGroup="Company"/>
<xs:element name="Société" substitutionGroup="Company"/>

<xs:complexType name="User">
  <xs:sequence>
    <xs:element minOccurs="0" maxOccurs="1" ref="Company" />
  </xs:sequence>
</xs:complexType>

这使我能够成功验证以下 XML 片段:

<User>
  <Company>In English</Company>
</User>

<User>
  <Société>In French</Société>
</User>

恐怕 xsd 生成的 c# 类和对应的 XMLSerializer 只能与第一个 XML 片段一起使用。

在我看来,我有两个选择:

  1. 在反序列化之前使用 XSLT 处理 XML 文件,以便将元素名称提升为英文。
  2. 编写自定义反序列化代码。

你怎么看? 样品将不胜感激。 TIA。

【问题讨论】:

    标签: c# xml-serialization


    【解决方案1】:

    我建议您使用以下结构进行序列化/反序列化:

    <User>
        <Company language="en">In English</Company>
    </User>
    

    <User>
        <Company language="fr">In French</Company>
    </User>
    

    如果您的原始 XML 不符合这样的固定结构,您可以使用 XSLT 对其进行转换。

    【讨论】:

    • 在 .NET 反序列化的上下文中,目标是在类中只有一个属性接收值,无论 XML 文件中使用的元素名称是什么。在这种情况下,在反序列化之前使用 XSL 意味着将替换名称替换为映射到属性的主名称。
    猜你喜欢
    • 2012-02-02
    • 2011-06-28
    • 2011-05-12
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    • 2010-11-25
    相关资源
    最近更新 更多