gpt4 book ai didi

c# - XML 将列表对象序列化为从 XSD 文件生成的 XmlText (XmlTextAttribute)

转载 作者:太空宇宙 更新时间:2023-11-03 15:59:20 26 4
gpt4 key购买 nike

我在序列化对象时遇到问题。该对象是从 XSD 文件生成的。

这是来自 XSD 的元素:

<xs:element name="ResGuestRPHs" type="ResGuestRPHsType" minOccurs="0">
<xs:annotation>
<xs:documentation xml:lang="en">A collection of ResGuestRPH objects. </xs:documentation>
</xs:annotation>
</xs:element>

<xs:complexType name="ResGuestRPHsType">
<xs:annotation>
<xs:documentation xml:lang="en">A collection of unsigned integers serving as reference placeholders, and used as an index identifying which guests occupy this room</xs:documentation>
</xs:annotation>
<xs:simpleContent>
<xs:extension base="ListOfRPH"/>
</xs:simpleContent>
</xs:complexType>

<xs:simpleType name="ListOfRPH">
<xs:annotation>
<xs:documentation xml:lang="en">List of Reference Place Holders.</xs:documentation>
</xs:annotation>
<xs:list itemType="RPH_Type"/>
</xs:simpleType>

<xs:simpleType name="RPH_Type">
<xs:annotation>
<xs:documentation xml:lang="en">The Reference Place Holder (RPH) is an index code used to identify an instance in a collection of like items (e.g. used to assign individual passengers or clients to particular itinerary items).</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]{1,8}"/>
</xs:restriction>
</xs:simpleType>

此元素在序列化后应输出为(注意数字之间的空格表明它是列表的 2 个元素):

<ResGuestRPHs>1 2</ResGuestRPHs>

但是它是否在没有空格的情况下生成导致反序列化为仅 1 个元素的结果:

<ResGuestRPHs>12</ResGuestRPHs>

这是生成的对象:

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18408")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.opentravel.org/OTA/2003/05")]
[System.Xml.Serialization.XmlRootAttribute(Namespace="http://www.opentravel.org/OTA/2003/05", IsNullable=true)]
public partial class ResGuestRPHsType
{

private System.Collections.Generic.List<string> textField;

/// <remarks/>
[System.Xml.Serialization.XmlTextAttribute()]
public System.Collections.Generic.List<string> Text
{
get
{
return this.textField;
}
set
{
this.textField = value;
}
}
}

这是用“WSCF.blue”生成的。当我将列表更改为数组时,它会出现同样的问题。当我使用它时,因为“XmlAttributeAttribute”是有效的(但它当然不使用 XSD 进行验证)。

有人知道为什么序列化不正确吗?

最佳答案

目前我使用以下“肮脏”的解决方案。添加到列表时,我手动添加了一个空格(resGuestRPH是要添加的变量):

ResGuestRPHs.Text.Add(resGuestRPH + " ");

读取列表时,我手动拆分了字符串:

ResGuestRPHs.Text = ResGuestRPHs.Text.First().Trim().Split(' ').ToList();

通过这种方式,XML 可以通过 XSD 进行验证,但我仍然希望有人能帮我找到一个“干净”的解决方案。

关于c# - XML 将列表对象序列化为从 XSD 文件生成的 XmlText (XmlTextAttribute),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22097177/

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