我有这样的代码:
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
答案 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)
RestSharp已决定在v107.0中恢复对Newtonsoft.JSON的支持。
因此,如果您使用的是RestSharp 107+,则可以安全地使用JsonPropertyAttribute
属性来指定属性映射。当使用其他命名约定(例如,蛇形)处理API时,这特别有用。