如何在ServiceStack.Text中使用EnumMember属性反序列化可为空的枚举?

时间:2018-08-30 13:20:26

标签: .net servicestack datacontract servicestack-text

这是前面两个有关ServiceStack.Text的问题的后续问题:firstsecond。从检查这些问题的答案可以看出,可以根据枚举的data contractEnumMember属性对枚举进行序列化和反序列化。但是可为空的枚举,即EnumType?类型呢?使用ServiceStack.Text,是否可以使用EnumMember属性将其序列化?使用ServiceStack.Text 5.2.0,下面的代码:

namespace TestNameSpace
{
    using ServiceStack;
    using System;
    using System.Runtime.Serialization;

    class TestClass
    {
        [DataContract]
        enum TestEnum
        {
            [EnumMember(Value = "enum_value")]
            EnumValue = 0,
        }

        static void Main(string[] args)
        {
            TestEnum? nullableEnum = TestEnum.EnumValue;
            Console.WriteLine($"nullableEnum.ToJson: {nullableEnum.ToJson()}");
            Console.WriteLine($"nullableEnum.ToCsv: {nullableEnum.ToCsv()}");
            Console.WriteLine($"nullableEnum.ToJsv: {nullableEnum.ToJsv()}");
            Console.WriteLine($"nullableEnum.ToXml: {nullableEnum.ToXml()}");
        }
    }
}

打印以下内容:

nullableEnum.ToJson: "EnumValue"
nullableEnum.ToCsv: EnumValue
nullableEnum.ToJsv: EnumValue
nullableEnum.ToXml: <?xml version="1.0" encoding="utf-8"?><TestClass.TestEnum xmlns="http://schemas.datacontract.org/2004/07/TestNameSpace">enum_value</TestClass.TestEnum>

,我希望所有输出格式都具有enum_value。可以通过ServiceStack.Text实现吗?

1 个答案:

答案 0 :(得分:2)

现在应该从this commit中解决。此更改可从v available on MyGet的v5.2.1版本开始。