如何配置 ServiceStack.Text 在序列化为 csv 或 jsv 时使用 EnumMember?
How to configure ServiceStack.Text to use EnumMember when serializing to csv or jsv?
这是我之前关于 . The answer to that question resolves how to get ServiceStack.Text to use .Net DataContract and EnumMember 将字符串映射到枚举值的问题的后续问题。现在我正在尝试将相同的枚举序列化为各种格式,虽然 json 序列化按预期以往返方式工作,但 csv 和 jsv 转换都忽略了数据协定。有没有办法以某种方式配置 ServiceStack.Text(版本 5.1.0,运行 on .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 这可能吗?
this commit available from v5.1.1 that's now on MyGet 现在应该得到支持。
这是我之前关于
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 这可能吗?
this commit available from v5.1.1 that's now on MyGet 现在应该得到支持。