gpt4 book ai didi

c# - 如何在没有包含元素的情况下序列化 'Any' 元素序列

转载 作者:行者123 更新时间:2023-11-30 16:16:42 25 4
gpt4 key购买 nike

我需要序列化一些数据以作为消息通过网络服务传递,网络服务将根据模式验证数据。我已经构建了一个对象模型,但我在一个小区域中遗漏了一些东西。

这是模式:

<xs:element name="UserDetailsMessage" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="URDUSERDETAILS" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:any processContents="skip" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>

这是我的课:

[Serializable()] public class UserDetailsMessage
{
private USERDETAILS myUserDetails;

[XmlElementAttribute("USERDETAILS")]
public USERDETAILS USERDETAILS {
get {
if (myUserDetails == null)
myUserDetails = new USERDETAILS();
return this.myUserDetails;
}
set { this.myUserDetails = value; }
}

public bool URDUSERDETAILSSpecified {
get {
if (myUserDetails == null)
return false;
return true;
}
}

}

[Serializable()] public class USERDETAILS
{
private List<System.Xml.XmlElement> anyField;

[XmlAnyElementAttribute(), XmlElementAttribute("Any")]
public List<System.Xml.XmlElement> Any {
get { return this.anyField; }
set { this.anyField = value; }
}

}

我在 Any 元素上使用 XmlElementAttribute 以使其序列化为没有容器的元素序列,但是 XML 输出没有出现像我想的那样:

<UserDetailsMessage>
<USERDETAILS>
<Any>
<TEST_DATA_HERE />
</Any>
</USERDETAILS>
</UserDetailsMessage>

这会导致 XmlDocument.Validate 方法输出此验证错误:The 'Any' element is not declared

据我所知,我尝试创建的输出应该如下所示:

<UserDetailsMessage>
<USERDETAILS>
<TEST_DATA_HERE />
</USERDETAILS>
</UserDetailsMessage>

XmlElementAttribute 是否以某种方式与 XmlAnyElementAttribute 交互以产生此输出,还是我在某处犯了一个明显的错误?或者,我应该如何序列化没有包含元素的“任何”元素序列?

最佳答案

我终于有时间坐下来创建仅关注特定领域的测试项目,并得出以下结果。

<Serializable()> Public Class NotificationMessage

Private myUserData As UserData

Public Sub New()
myUserData = New UserData()
End Sub

<System.Xml.Serialization.XmlElementAttribute("UserData")> _
Public Property UserData() As UserData
Get
Return Me.myUserData
End Get
Set(value As UserData)
Me.myUserData = value
End Set
End Property

End Class

<Serializable()> Public Class UserData

Private anyField As List(Of System.Xml.XmlElement)

Public Sub New()
Me.anyField = New List(Of System.Xml.XmlElement)()
End Sub

<XmlAnyElementAttribute()>
Public Property Any() As List(Of System.Xml.XmlElement)
Get
Return Me.anyField
End Get
Set(value As List(Of System.Xml.XmlElement))
Me.anyField = value
End Set
End Property
End Class

这是 XmlElementXmlAnyElement 组合并应用于 UserData 类的 Any 属性时的输出:

<NotificationMessage>
<UserData>
<Any>
<TEST_DATA_HERE />
</Any>
</UserData>
</NotificationMessage>

这是仅应用 XmlElement 时的输出:

<NotificationMessage>
<UserData>
<Any>
<TEST_DATA_HERE />
</Any>
</UserData>
</NotificationMessage>

这是仅应用了 XmlAnyElement 的输出:

<NotificationMessage>
<UserData>
<TEST_DATA_HERE />
</UserData>
</NotificationMessage>

因此我们可以看到,为了序列化“任何”元素的序列,我们必须单独使用 XmlAnyElement 属性。

关于c# - 如何在没有包含元素的情况下序列化 'Any' 元素序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18061069/

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