RestSharp for JSON中的属性映射不起作用

问题描述 投票:6回答:2

我有这样的代码:

using System;
using RestSharp.Serializers;

public class Program
{
    public static void Main()
    {
        var obj = new Order();
        obj.Test = 42;
        var serializer = new JsonSerializer();
        var json = serializer.Serialize(obj);
        Console.WriteLine(json);    
    }
}

public class Order
{
    [SerializeAs(Name = "object")]
    public string Object
    {
        get { return "Order"; }
    }

    [SerializeAs(Name = "TestName")]
    public int Test
    {
        get;set;
    }           
}

基于SerializeAs属性,RestSharp应使用属性中的名称,而不是属性名称。但它只是忽略了它。此代码的输出是:

{
  "Object": "Order",
  "Test": 42
}

我错过了什么,或者它与RestSharp不兼容?

DotNetFiddle中的相同代码片段 - http://dotnetfiddle.net/ffaXUY

.net json serialization restsharp
2个回答
1
投票

this resource说:

RestSharp决定在v107.0中恢复对Newtonsoft.JSON的支持。

因此,如果您使用的是RestSharp 107+,则可以安全地使用JsonPropertyAttribute属性来指定属性映射。当使用另一种命名约定(例如蛇案例)处理API时,这尤其有用。

Related


3
投票

好吧,RestSharp使用SimpleJson,它没有任何对SerializeAs的引用,它也没有自己的机制。我找到了一个拉请求 - https://github.com/restsharp/RestSharp/pull/331,但由于SimpleJson它被关闭了。

IJsonSerializerStrategy的默认实现中 - PocoJsonSerializerStrategy有一些初始逻辑可以替换属性名称,但它现在不起作用。它有这样的方法 - https://github.com/facebook-csharp-sdk/simple-json/blob/master/src/SimpleJson/SimpleJson.cs

protected virtual string MapClrMemberNameToJsonFieldName(string clrPropertyName)
{
    return clrPropertyName;
}

所以我根据本文的样本 - http://blog.patrickmriley.net/2014/02/restsharp-using-jsonnet-serializer.html将SimpleJson替换为Newtonsoft Json

© www.soinside.com 2019 - 2024. All rights reserved.