Dot-Net
RestSharp 序列化為 JSON,對象未按預期使用 SerializeAs 屬性
我正在使用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 以所有“小寫”形式使用它們。