Dot-Net

RestSharp 序列化為 JSON,對象未按預期使用 SerializeAs 屬性

  • February 7, 2014

我正在使用RestSharp(通過 NuGet 的 104.4 版)呼叫 Rest Web 服務。我設計了一組與 API 中公開的資源相匹配的對象 (POCO)。但是,我的對象屬性名稱與發布數據時 Rest 服務所期望的名稱不匹配,因此我想在向 Rest 服務發出請求以使其匹配時“轉換”它們。我讀到SerializeAs在我的 POCO 屬性上添加屬性(指定名稱)將使它們正確序列化,但不會。

我的 POCO

Imports RestSharp.Serializers

<Serializable(), SerializeAs(Name:="ApiMember")>
Public Class ApiMember
   <SerializeAs(Name:="id")>
   Public Property Id As Integer?

   <SerializeAs(Name:="email")>
   Public Property EmailAddress As String

   <SerializeAs(Name:="firstname")>
   Public Property Firstname As String

   <SerializeAs(Name:="lastname")>
   Public Property Lastname As String
End Class

我對 API 的呼叫

Dim request As RestRequest = New RestRequest(Method.POST)
Dim member As ApiMember = new ApiMember()

member.EmailAddress = "me@example.com"

request.Resource = "members"
request.RequestFormat = DataFormat.Json
request.AddBody(member)

Dim client As RestClient = New RestClient()
client.BaseUrl = "http://url.com"
client.Authenticator = New HttpBasicAuthenticator("username", "password")
client.Execute(Of ApiGenericResponse)(request)

最終發布了什麼

{"Id":null,"EmailAddress":"me@example.com","Firstname":null,"Lastname":null}

SerializeAs請注意,屬性的名稱與我在(大寫,EmailAddress 的名稱)中指定的名稱不匹配

我錯過了什麼嗎?

這適用於@MaxiWheat 和任何對如何在 RestSharp 請求中使用JSON.NET作為 JSON 序列化程序感興趣的人。基本上,我使用了Patrick Riley 在這篇博文中描述的方法:

// create the request
var request = new RestRequest(yourUrlHere, Method.POST) { RequestFormat = DataFormat.Json };

// attach the JSON.NET serializer for RestSharp
restRequest.JsonSerializer = new RestSharpJsonNetSerializer();

RestSharpJsonNetSerializer是 JSON.NET 人員 (John Sheehan) 的一個實現(不到 100 行程式碼),可以在他們的 Github 頁面上找到

有了這個設置,我的問題就消失了,我能夠擁有一個具有良好 CamelCase 屬性的適當 DTO,而序列化的 JSON 以所有“小寫”形式使用它們。

引用自:https://stackoverflow.com/questions/21633649