我已经开发了XSD,它定义了标准,并且有助于将两个应用程序一起通信。应用程序A和B。
应用程序A正确地从B读取xml数据。但是,当它尝试将相同的数据转换/序列化为xml时,会错误地进行序列化。
XML示例为:(希望如此)
<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>
等效的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属性需要修改!
任何对此的建议将不胜感激。
答案 0 :(得分:2)
使用xsd.exe将xsd转换为C#,不要手工。
此外,为了便于阅读,您应该隔离复杂的类型。当元素包含复杂类型时,请将其声明为XSD根目录下而不是元素内部的命名类型。
然后在声明元素时,用xs:type="tns:complextypename"
引用复杂类型
编辑:简单类型也是如此。