Я пытаюсь использовать Json.NET с System.Net.Http.HttpClient для отправки объекта с свойством enum, однако перечисление всегда сериализуется как целочисленное значение, а не эквивалент строки.
Я пробовал следующие инструкции:
Добавив экземпляр 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"}
, что и ожидалось.