c# - 如何形成有助于序列化到 c# 类中的有效 XSD

标签 c# serialization xsd

我开发了 XSD,它定义了标准并有助于将两个应用程序一起通信。应用程序 A 和 B。

应用程序A从B正确读取了xml数据。但是当它尝试将相同的数据转换/序列化为 xml 时,它序列化错误。

XML 例子是:(wants like as)

   <Field>
      <FieldId>1</FieldId>
       <FieldType>  
          <FieldTypeString>John</FieldTypeString>
       </FieldType>
    <\Field>
or
    <Field>
      <FieldId>2</FieldId>
      <FieldType>  
        <FieldTypeInteger>30</FieldTypeString>
      </FieldType>
    <\Field>

 or   
    <Field>
      <FieldId>3</FieldId>
      <FieldType>  
        <FieldTypeDate>19/06/2019</FieldTypeString>
      </FieldType>
    <\Field>

等效的 XSD 是: enter image description here

等效的 C# 类是:

public partial class FieldGroupFieldColumnFieldFieldType
{

    private object itemField;

    private ItemChoiceType itemElementNameField;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("FieldTypeCheckedUnChecked", typeof(bool))]
    [System.Xml.Serialization.XmlElementAttribute("FieldTypeDate", typeof(System.DateTime), DataType = "date")]
    [System.Xml.Serialization.XmlElementAttribute("FieldTypeFloat", typeof(decimal))]
    [System.Xml.Serialization.XmlElementAttribute("FieldTypeInteger", typeof(string), DataType = "integer")]
    [System.Xml.Serialization.XmlElementAttribute("FieldTypeString", typeof(string))]
    [System.Xml.Serialization.XmlElementAttribute("FieldTypeTime", typeof(System.DateTime), DataType = "time")]
    [System.Xml.Serialization.XmlElementAttribute("FieldTypeYESNO", typeof(bool))]
    [System.Xml.Serialization.XmlChoiceIdentifierAttribute("ItemElementName")]
    public object Item
    {
        get
        {
            return this.itemField;
        }
        set
        {
            this.itemField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlIgnoreAttribute()]
    public ItemChoiceType ItemElementName
    {
        get
        {
            return this.itemElementNameField;
        }
        set
        {
            this.itemElementNameField = value;
        }
    }
}

应用程序 A 完美地解析了来自 B 的 xml。但是当它自己生成 XML 时,它看起来像。

<Field>
      <FieldId>1</FieldId>
       <FieldType>  
          <Item>John</FieldTypeString>
          <ItemElementName>2</ItemElementName>
       </FieldType>
<\Field>

我认为 XSD/class 属性需要修改!

如有任何建议,我们将不胜感激。

最佳答案

使用 xsd.exe 将 xsd 转换为 C#,不要手动进行。

此外,为了可读性,您应该隔离复杂类型。当元素包含复杂类型时,将复杂类型声明为 XSD 根下的命名类型,而不是在元素内部。

然后在声明元素时,使用 xs:type="tns:complextypename" 引用复杂类型

编辑:这同样适用于简单类型。

关于c# - 如何形成有助于序列化到 c# 类中的有效 XSD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56666171/

相关文章:

C# - 序列化和反序列化静态成员

java - XSD 三个元素之间的选择

c# - PictureBox透明控制

c# - 后期如何回滚事务?

c# - .NET/WPF 中的通用 JSON 解析器?

c# - 在 C# 中动态序列化大量对象而不是一次全部序列化?

sql-server - 如何 xQuery 作为 xs :date that can be empty? 列表的元素

xml - XJC - [错误]编译器无法支持此属性自定义

c# - 更改 ComboBox 边框颜色 - SelectedIndex 更改时闪烁

c# - 基础实体类。 N休眠