ASP.NET WebAPI将下划线放在XML和JSON中的返回元素名称上

Ric*_*ler 4 asp.net-web-api

我正在对新的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
Run Code Online (Sandbox Code Playgroud)

我检索单个Test的测试操作方法如下所示:

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
Run Code Online (Sandbox Code Playgroud)

当我在浏览器或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>
Run Code Online (Sandbox Code Playgroud)

如何摆脱元素/属性名称上不需要的下划线?

谢谢!

小智 8

<Serializable()>在Class之前删除 ,然后结果将不包含"_".


Dar*_*rov 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
Run Code Online (Sandbox Code Playgroud)

经过进一步调查后,似乎如果你在C#中做同样的事情,就不会添加下划线而不需要使用DataMember.它只是有效.所以我想这应该是一些VB.NET的东西.