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

时间:2014-02-28 16:26:21

标签: .net json serialization restsharp

我有这样的代码:

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

2 个答案:

答案 0 :(得分: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;
}

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

答案 1 :(得分:1)

根据this resource

  

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

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

Related