当前位置: 首页 > 面试题库 >

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

微生烨然
2023-03-14
问题内容

我正在使用 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名称)

我想念什么吗?


问题答案:

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



 类似资料:
  • 我需要反序列化以下json: 将它的< code>id属性设置为< code>foo_id json属性。 我需要在自定义反序列化程序中执行此操作。实现这一点最简单的方法是什么? 我想以某种方式将json“转换”为 然后将此委托给杰克逊。 在本例中,对象的类型为Foo,但其他对象可能不属于此类。另外,在本例中,json是一个数字,但如果它也是一个字符串,我希望支持。所以,我需要一种通用的方法来做到

  • 我有两个Java类:Usuario和entrada。 乌苏亚里奥: Entrada: 我晚上还有课: 我正在使用Spring数据,但我有一个递归序列化问题。当我“打印”一个Usuario类型的对象时,它应该序列化Usuario的所有信息。这里的要点是,Entrada(Usuario中的List)有一个Usuario类型的属性。 我不想序列化Entrada的Usuario。我只是想序列化Usuari

  • 问题内容: 如何在JavaScript中将对象序列化为JSON? 问题答案: 您正在寻找。

  • 问题内容: 我正在尝试反序列化来自API的JSON响应。JSON如下所示(MAC地址和位置已更改): 问题在于措施措施。由于对象的名称正在更改,因此我不知道如何将其正确反序列化为C#对象。我在这里发现使用字典的解决方案存在类似问题,但是如果以这种方式尝试,我只会得到空目录。 这是我的反序列化方法: 这是APIResponse类: 有什么方法可以轻松地适当地反序列化这些措施吗? 问题答案: 看来您应

  • 问题内容: 我的JSON有点弱,所以我需要一些帮助。 我正在尝试反序列化用户的JSON: 放入我用属性装饰的对象中: 我得到以下异常: Newtonsoft.Json.JsonSerializationException:在JSON中找不到必需的属性’user_id’。 这是因为JSON对象是一个数组吗?如果是这样,如何将其反序列化为一个User对象? 提前致谢! 问题答案: 正如Alexandr

  • 给定一个JSON对象,它具有可变属性(例如标签),可以是原始值(例如字符串)或对象。假设的用例可以是标签多元化翻译的包装器: 或者 目标是使Jackson反序列化始终在Java端返回固定结构。因此,如果给定原语值,它总是转换为目标POJO的某个属性(例如其他),即: 目前,该问题通过使用自定义来解决,它检查属性是否为原语: 是否有一种更优雅的方法来处理可变JSON属性,而不需要在节点级别操作的解码