我正在尝试将 Json.NET 与 System.Net.Http.HttpClient 一起使用来发送具有枚举属性的对象,但是枚举始终序列化为整数值而不是等效的字符串。
我尝试按照此处的说明进行操作:
通过将 StringEnumConverter 的实例添加到 JsonSerializerSettings 并尝试装饰 enum 属性,[JsonProperty(ItemConverterType = typeof(StringEnumConverter))]
这两种方法在我的示例中似乎都不起作用。
我正在使用 Json.NET 5.0.8 版
谁能告诉我我做错了什么?这是一个示例控制台应用程序,用于复制显示全局序列化程序设置和修饰属性:
谢谢。
using System;
using System.Net.Http;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
HttpClient client = new HttpClient { BaseAddress = new Uri("http://test-uri.com") };
JsonConvert.DefaultSettings = (() =>
{
var settings = new JsonSerializerSettings();
settings.Converters.Add(new StringEnumConverter());
return settings;
});
var data = new TestData { Enum = TestEnum.Hello };
// The following posts: {"Enum":0}
// Shouldn't it post {"Enum":"Hello"} instead?
var result = client.PostAsJsonAsync("/test", data).Result;
}
public class TestData
{
[JsonProperty(ItemConverterType = typeof(StringEnumConverter))]
public TestEnum Enum { get; set; }
}
public enum TestEnum
{
Hello,
World
}
}
}
我已经用 Fiddler 进行了检查,它发布了:{"Enum":0}
而不是{"Enum":"Hello"}
我所期望的。