指定分配索引值时,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 不使用枚举 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

es指定分片以及分片副本数

为啥在多维数据集中分配值时会产生nan?

为啥当 WHERE 子句包含参数化值时 SQL Server 使用索引扫描而不是索引查找

从数组分配值时字符数组编译时错误

将右值引用分配给左值时发生了啥?

在 c++ 中将对象分配给一个值时会发生啥 [关闭]