我正在对新的ASP.NET Web API进行一些简单的测试,当我从action方法返回一个可序列化的类或集合时,我遇到了以下问题。
我的班级看起来像这样:
<Serializable()>
Public Class Test
<XmlElement(ElementName:="Name")>
Public Property Name() As String = String.Empty
<XmlElement(ElementName:="ID")>
Public Property ID() As String = String.Empty
<XmlElement(ElementName:="ClassID")>
Public Property ClassID() As String = String.Empty
End Class
我检索单个测试的测试操作方法如下所示:
Public Function GetTest(ByVal id As String) As Test
Dim newTest As Test = new Test() With {.ID = id, .Name = "My Test", .ClassID = System.Guid.NewGuid().ToString()}
return newTest
End Function
当我在浏览器或Fiddler中以XML或JSON的形式查看结果时,返回的Test类的属性名称已经为它们添加了unserscores,如下所示:
<Test>
<_ClassID>88bb191d-414c-45a4-8213-37f96c41a12d</_ClassID>
<_ID>ed853792-b7eb-4378-830b-1db611e12ec9</_ID>
<_Name>Another Test</_Name>
</Test>
如何清除元素/属性名称上不需要的下划线?
谢谢!
答案 0 :(得分:8)
在Class之前删除<Serializable()>
,然后结果将不包含“_”。
答案 1 :(得分:6)
您可以使用DataMember属性:
Public Class Test
<DataMember(Name:="Name")>
Public Property Name() As String = String.Empty
<DataMember(Name:="ID")>
Public Property ID() As String = String.Empty
<DataMember(Name:="ClassID")>
Public Property ClassID() As String = String.Empty
End Class
经过进一步调查后,似乎如果你在C#中做同样的事情,就不会添加下划线而不需要使用DataMember。它只是有效。所以我想这应该是一些VB.NET的东西。
答案 2 :(得分:0)
我对json中的前置下划线有类似的经验,我没有使用Serializable属性标记的类。在我的情况下,修复是:
Imports Newtonsoft.Json
<JsonObject>
Public Class MyObject
...