Json.NET StringEnumConverter ne fonctionne pas comme prévu

Je suis d'essayer d'utiliser Json.NET avec le Système.Net.Http.HttpClient pour envoyer un objet avec une énumération des biens, toutefois l'enum est toujours sérialisé comme une valeur entière plutôt que de l'équivalent de chaîne.

J'ai essayé en suivant les instructions ici:

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

Par ajout d'une instance de StringEnumConverter à la JsonSerializerSettings et également essayé de décorer l'enum propriété avec [JsonProperty(ItemConverterType = typeof(StringEnumConverter))] ni de ce qui semble être de travailler dans mon exemple.

Je suis en utilisant Json.NET la version 5.0.8

Quelqu'un peut me dire ce que je fais mal, s'il vous plaît? Voici un exemple d'une application de console à reproduire en montrant à la fois le mondial sérialiseur paramètres et décoré de la propriété:

Grâce.

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
        }
    }
}

J'ai inspecté ce avec un violon et des postes: {"Enum":0} plutôt que {"Enum":"Hello"} qui est ce à quoi je m'attends.

source d'informationauteur Garry Marsland