这是我到目前为止所拥有的:
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()
,但我不想。我宁愿有一些属性,所以我不必记得每次都这样做。
答案 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);