gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 22:53:59 26 4
gpt4 key购买 nike

我开发了 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com