指定分配索引值时,JavaScriptSerializer 不使用枚举 [重复]
Posted
技术标签:
【中文标题】指定分配索引值时,JavaScriptSerializer 不使用枚举 [重复]【英文标题】:JavaScriptSerializer not working with enum when specify assign an index value [duplicate] 【发布时间】:2018-04-03 23:03:55 【问题描述】:一个包含枚举属性并使用 javascriptSerializer 序列化对象的类。 当我序列化 JSON 时,我得到的是索引值而不是文本。 举个例子:
public enum LocationType
[Description("Description 1") ,EnumMember(Value = "EST")]
EST = 1,
[Description("Description 2"), EnumMember(Value = "INTNS")]
INTNS = 2,
[Description("Description 3"), EnumMember(Value = "INTS")]
INTS = 3
public class Details
public LocationType? LocationType get; set;
List<Details> obj = new List<Details>();
obj.Add(new Details() LocationType = LocationType.INTNS );
obj.Add(new Details() LocationType = LocationType.INTS );
obj.Add(new Details() LocationType = LocationType.EST );
obj.Add(new Details() LocationType = LocationType.INTS );
obj.Add(new Details() LocationType = LocationType.EST );
obj.Add(new Details() LocationType = LocationType.EST );
obj.Add(new Details() LocationType = LocationType.INTS );
obj.Add(new Details() LocationType = LocationType.EST );
return obj;
实际json结果:
"LocationType ": 2
预期的 json 结果:
"LocationType ": "INTNS"
【问题讨论】:
我不能将 LocationType.INTNS.Value 用于枚举。使用 LocationType.INTNS 时会返回 INTNS 使用 Json.Net 会好很多。这些天,甚至 MS 自己也停止使用 JavaScriptSerialzer,而不是 Json.Net 当我使用 newtonsoft 时,它可以正常工作,但我需要在 javascriptserializer 中实现这种情况 【参考方案1】:好的,我刚刚测试过,并且怀疑您为枚举分配了两次值。 如果要将其分配给“字符串”值而不是 int。您不需要将其设置为 int,如文章所示: https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/enumeration-types-in-data-contracts
因此,如果您这样做,它将起作用:
public enum LocationType
[Description("Description 1") ,EnumMember(Value = "EST")]
EST,
[Description("Description 2"), EnumMember(Value = "INTNS")]
INTNS,
[Description("Description 3"), EnumMember(Value = "INTS")]
INTS
在使用值时,您可能需要在枚举上调用 ToString():
LocationType.INTNS.ToString();
【讨论】:
这不是一个合适的解决方案,我们需要相应的索引 当我使用 newtonsoft 时,它可以正常工作,但我需要在 javascriptserializer 中实现这种情况以上是关于指定分配索引值时,JavaScriptSerializer 不使用枚举 [重复]的主要内容,如果未能解决你的问题,请参考以下文章