6

根据 Diego 在此问题中投票率最高的答案下未回答的评论:

枚举的 JSON 序列化为字符串

所以对于一个枚举:

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 一样吗?

4

2 回答 2

3

看来,在 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 升级的问题时,我无法尝试。最后,我IEnumerable<string>按照 Shmiddty 的建议将我的视图模型转换为(尽管仍然存在阻抗不匹配,我将来会回来重构它)。

希望能帮助其他有同样问题的人!

示例用法:

[JsonProperty(ItemConverterType = typeof(StringEnumConverter))]
IEnumerable<ContactType> AvailableContactTypes {get;set;} 
于 2013-02-20T11:21:08.960 回答
2

我一直发现在这些情况下添加附加属性比尝试更改 json.net 解析器的行为更容易。

[JsonIgnore]
IEnumerable<ContactType> AvailableContactTypes {get;set;}

IEnumerable<string> AvailableContactTypesString
{
    get { return AvailableContactTypes.Select(c => c.ToString()); }
}

当然,如果您需要反序列化,您还需要该属性的设置器。

set { AvailableContactTypes = value
    .Select(c => Enum.Parse(typeof(ContactType), c) as ContactType); }
于 2013-02-19T18:23:59.860 回答