序列化为csv或jsv时如何配置ServiceStack.Text以使用EnumMember?

时间:2018-08-24 09:58:26

标签: .net csv servicestack datacontract servicestack-text

这是我先前关于ServiceStack.Text and deserializing json to .Net enums的问题的跟进问题。该问题的答案解决了如何使ServiceStack.Text使用.Net DataContractEnumMember将字符串映射到枚举值。现在,我正在尝试将相同的枚举序列化为各种格式,而json序列化按预期的往返方式工作,csv和jsv转换都忽略了数据协定。有没有一种方法可以配置ServiceStack.Text(版本5.1.0,在.Net Core 2.1上运行),以便以下代码将产生所有输出类型相同的结果,并且输出将遵循定义的数据约定?

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)
        {
            var testEnum = TestEnum.EnumValue;

            Console.WriteLine($"To json: {testEnum.ToJson()}");
            Console.WriteLine($"To csv: {testEnum.ToCsv()}");
            Console.WriteLine($"To jsv: {testEnum.ToJsv()}");
            Console.WriteLine($"To xml: {testEnum.ToXml()}");
        }
    }
}

实际输出是

To json: "enum_value"
To csv: EnumValue
To jsv: EnumValue
To xml: <?xml version="1.0" encoding="utf-8"?><TestClass.TestEnum xmlns="http://schemas.datacontract.org/2004/07/TestNameSpace">enum_value</TestClass.TestEnum>

虽然我也想在csv和jsv输出中看到enum_value。使用ServiceStack.Text可以做到这一点吗?

1 个答案:

答案 0 :(得分:1)

现在应该从this commitv5.1.1 that's now on MyGet支持。