簡體   English   中英

在Json.NET中是否有任何屬性可將Enums序列化為字符串?

[英]Are there any attributes for serializing Enums as strings in 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() ,但我不想這樣做。 我寧願具有一些屬性,所以我不必每次都記住這樣做。

只需使用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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM