4

新しい ASP.NET Web API の簡単なテストを行っています。アクション メソッドからシリアル化可能なクラスまたはコレクションを返すときに、次の問題が発生しています。

私のクラスは次のようになります。

<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

単一の 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

結果をブラウザーまたは 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>

要素/プロパティ名の不要なアンダースコアを取り除くにはどうすればよいですか?

ありがとう!

4

3 に答える 3

8

クラスの前に削除 <Serializable()>すると、結果に「_」が含まれなくなります。

于 2013-01-09T13:14:14.910 に答える
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のようなものだと思います。

于 2012-07-12T17:14:10.990 に答える