gpt4 book ai didi

c# - Json.NET StringEnumConverter 未按预期工作

转载 作者:可可西里 更新时间:2023-11-01 03:06:00 39 4
gpt4 key购买 nike

我正在尝试将 Json.NET 与 System.Net.Http.HttpClient 一起使用以发送具有枚举属性的对象,但是枚举始终序列化为整数值而不是等效字符串。

我已尝试按照此处的说明进行操作:

http://james.newtonking.com/archive/2013/05/08/json-net-5-0-release-5-defaultsettings-and-extension-data

通过将 StringEnumConverter 的实例添加到 JsonSerializerSettings 并尝试使用 [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"} 我是这样的会期待。

最佳答案

JsonPropertyAttribute 属性的 ItemConverterType 属性是用于集合项的转换器。您应该使用 JsonConverterAttribute 属性。

public class TestData
{
[JsonConverter(typeof(StringEnumConverter))]
public TestEnum Enum { get; set; }
}

关于c# - Json.NET StringEnumConverter 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19731192/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com