【发布时间】:2011-10-21 18:02:01
【问题描述】:
我是 WCF 的新手,很遗憾只知道 VB.NET。阅读了这篇最有趣的帖子 - DataContract XML serialization and XML attributes 后,我尝试将其直接转换为 VB.NET,但它似乎并没有给我正确的结果。我得到的只是没有属性的根元素:
<root xmlns="http://schemas.datacontract.org/2004/07/shutlBookingService" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"/>;
任何有关如何使用 VB.NET 向元素添加属性的线索将不胜感激。
好的,代码如下:
<ServiceContract()>
<AspNetCompatibilityRequirements(RequirementsMode:=AspNetCompatibilityRequirementsMode.Allowed)>
<ServiceBehavior(InstanceContextMode:=InstanceContextMode.PerCall)>
Public Class Service1
<WebGet(UriTemplate:="Test", ResponseFormat:=WebMessageFormat.Xml)>
Public Function Test() As Test
Dim mc As New Test
mc.timestamp = Now
mc.success = "0"
Return mc
End Function
End Class
数据合同是:
Imports System
Imports System.Runtime.Serialization
Imports System.Xml
Imports System.Xml.Serialization
Imports System.ServiceModel
<DataContract()> _
<XmlSerializerFormat()> _
Public Class Test
Private timestamp_att As Date
Private success_att As String = ""
<DataMember()>
<XmlAttribute(AttributeName:="timestamp")> _
Public Property timestamp() As Date
Get
Return Me.timestamp_att
End Get
Set(value As Date)
Me.timestamp_att = value
End Set
End Property
<DataMember()>
<Xml.Serialization.XmlAttribute(AttributeName:="success")> _
Public Property success() As String
Get
Return Me.success_att
End Get
Set(value As String)
Me.success_att = value
End Set
End Property
End Class
输出是:
<Test xmlns="http://schemas.datacontract.org/2004/07/shutlBookingService" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<success>0</success>
<timestamp>2011-10-22T09:28:52.7884244+01:00</timestamp>
</Test>
您可以看到没有成功和时间戳作为属性。
【问题讨论】:
-
我在您的 DataContract 类中看不到任何元素 - 也许它需要一个默认元素来挂起属性?我对 XmlSerializer 不是很熟悉,所以我可能是错的。如果您有时间,您可能想要添加一些属性或字段并设置 XmlText 属性,看看是否有帮助。