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