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

时间:2012-07-12 17:07:31

标签: 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

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

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>

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

谢谢!

3 个答案:

答案 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
...