一尘不染

RestSharp序列化为JSON,对象未按预期使用SerializeAs属性

json

我正在使用 RestSharp (通过NuGet的104.4版)来调用Rest
Web服务。我设计了一组对象(PO​​CO),这些对象与API中公开的资源相匹配。但是,我的对象属性名称与发布数据时Rest服务期望的名称不匹配,因此当我向Rest服务发出请求以使其匹配时,我想对其进行“转换”。我读到SerializeAsPOCO属性上的添加属性(指定了名称)会使它们正确序列化,但是不会。

我的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名称)

我想念什么吗?


阅读 425

收藏
2020-07-27

共1个答案

一尘不染

这适用于@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在所有“小写字母”中都使用了它们。

2020-07-27