我有这样的代码:
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 使用 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
关于.net - RestSharp for JSON 中的属性映射不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22100519/