基于迭戈在这个问题中最高投票回答的未答复评论:
JSON serialization of enum as string
所以对于一个枚举:
public enum ContactType
{
Phone = 0,
Email = 1,
Mobile = 2
}
对于例如。财产:
//could contain ContactType.Phone, ContactType.Email, ContactType.Mobile
IEnumerable<ContactType> AvailableContactTypes {get;set;}
像JSON:
{ContactTypes : ['Phone','Email','Mobile']}
而不是
{ContactTypes : [0,1,2]}
与普通的JavaScriptSerializer一样吗?
答案 0 :(得分:2)
我总是发现在这些情况下添加额外属性比尝试更改json.net解析器的行为更容易。
[JsonIgnore]
IEnumerable<ContactType> AvailableContactTypes {get;set;}
IEnumerable<string> AvailableContactTypesString
{
get { return AvailableContactTypes.Select(c => c.ToString()); }
}
当然,如果你需要反序列化,你也需要在该属性上设置一个setter。
set { AvailableContactTypes = value
.Select(c => Enum.Parse(typeof(ContactType), c) as ContactType); }
答案 1 :(得分:1)
似乎在Json.NET的更高版本之一中,通过ItemConverterType
属性的JsonProperty
属性为此提供了适当的规定,如下所示:
http://james.newtonking.com/archive/2012/05/08/json-net-4-5-release-5-jsonproperty-enhancements.aspx
我无法尝试,因为我遇到了与我自己的项目相关的从Json.NET 3.5升级的问题。最后,根据Shmiddty的建议,我将视图模型转换为IEnumerable<string>
(虽然仍然存在阻抗不匹配,但我将来会重新进行重构)。
希望能帮助其他人解决同样的问题!
使用示例:
[JsonProperty(ItemConverterType = typeof(StringEnumConverter))]
IEnumerable<ContactType> AvailableContactTypes {get;set;}