我在用休息锐利(通过 NuGet 的版本 104.4)调用 Rest Web 服务。我设计了一组与 API 中公开的资源相匹配的对象 (POCO)。但是,我的对象属性名称与发布数据时 Rest 服务所期望的名称不匹配,因此当我向 Rest 服务发出请求以使它们匹配时,我想“转换”它们。我读到添加SerializeAs
我的 POCO 属性上的属性(指定了名称)将使它们正确序列化,但事实并非如此。
My 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 = "[email protected] /cdn-cgi/l/email-protection"
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":"[email protected] /cdn-cgi/l/email-protection","Firstname":null,"Lastname":null}
请注意,属性的名称与我在中指定的名称不匹配SerializeAs
(大写,电子邮件地址名称)
我错过了什么吗?
这是给@MaxiWheat 和任何其他对如何使用感兴趣的人的JSON.NET作为 RestSharp 请求中的 JSON 序列化器。基本上,我使用了中描述的方法帕特里克·莱利 (Patrick Riley) 的这篇博文 http://patrickrileyblogs.blogspot.com/2014/02/restsharp-using-jsonnet-serializer.html:
// create the request
var request = new RestRequest(yourUrlHere, Method.POST) { RequestFormat = DataFormat.Json };
// attach the JSON.NET serializer for RestSharp
restRequest.JsonSerializer = new RestSharpJsonNetSerializer();
and the RestSharpJsonNetSerializer
是 JSON.NET 人员 (John Sheehan) 的一个实现(不到 100 行代码)可以在他们的 Github 页面上找到 https://github.com/restsharp/RestSharp/blob/86b31f9adf049d7fb821de8279154f41a17b36f7/RestSharp/Serializers/JsonSerializer.cs
通过这个设置,我的问题消失了,我能够拥有一个具有良好 CamelCase 属性的正确 DTO,而序列化的 JSON 则以所有“小写”形式使用它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)