在Json.NET中是否有任何将Enums序列化为字符串的属性?

时间:2015-07-09 21:45:09

标签: c# json.net

这是我到目前为止所拥有的:

using Microsoft.VisualStudio.TestTools.UnitTesting;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;

namespace MyProject
{
    [TestClass]
    public class MyClass
    {
        [TestMethod]
        public void VerifyJsonString()
        {
            var json = new JObject
            {
                new JProperty("Thing", Things.Cats)
            };
            var actual = json.ToString(Formatting.None);
            const string expected = "{\"Thing\":\"Cats\"}";
            Assert.AreEqual(expected, actual);
        }
    }

    [JsonConverter(typeof(StringEnumConverter))]
    public enum Things
    {
        Apples,
        Bananas,
        Cats
    }
}

不幸的是,此测试失败,因为它将其序列化为{"Thing":2}。如何让它正确序列化枚举?我意识到我可以明确地呼叫.ToString(),但我不想。我宁愿有一些属性,所以我不必记得每次都这样做。

1 个答案:

答案 0 :(得分:3)

只需使用StringEnumConverter

即可
var actual = json.ToString(Formatting.None, 
                           new Newtonsoft.Json.Converters.StringEnumConverter());

修改

  

每次调用ToString()时,是否无法告诉它自动使用该转换器?

JsonConvert.DefaultSettings = () => new JsonSerializerSettings() { 
                Converters = new List<Newtonsoft.Json.JsonConverter>() { new Newtonsoft.Json.Converters.StringEnumConverter() } 
};

var actual = JsonConvert.SerializeObject(json);