.net RestSharp for JSON中的属性映射不';行不通
我有这样的代码:.net RestSharp for JSON中的属性映射不';行不通,.net,json,serialization,restsharp,.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.Seriali
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中的相同代码片段-好吧,RestSharp使用SimpleJson,它没有任何对SerializeAs的引用,也没有自己的机制。 我发现了一个拉请求-,但因为SimpleJson而关闭了它 在
IJsonSerializerStrategy
-PocoJsonSerializerStrategy
的默认实现中,有一些初始逻辑可以进行属性名替换,但目前还不起作用。它有这样的方法-:
因此,我根据本文中的示例将SimpleJson替换为Newtonsoft Json-,根据:
RestSharp决定在v107.0中恢复对Newtonsoft.JSON的支持
因此,如果您使用的是RestSharp 107+,那么可以安全地使用JsonPropertyAttribute
属性来指定属性映射。这在使用另一种命名约定(如snake case)处理API时特别有用
这甚至可以编译吗<代码>对象是一个保留关键字。我们可以使用类名作为属性名。没关系。但是如果我使用
对象
,那么它将不会编译,但它不适用于反序列化。如何在响应数据中获得这种行为?RestSharp使用Newtonsoft Json.Net已有一段时间了。看,嗯,是的。那很有趣。我会接受这个答案,因为这是最新的信息。谢谢
protected virtual string MapClrMemberNameToJsonFieldName(string clrPropertyName)
{
return clrPropertyName;
}