这是我目前的回复......(来自我的RESTful API)
[
{
"batchID": 1,
"status": "IN_PROGRESS"
}
]
但我真正想要的是......
[
{
"batchID": 1,
"status": 10 -- which means "In_progress" in my ENUM
}
]
这是我的c#DTO ......
public class ReplyItem
{
public int BatchID { get; set; }
public BatchStatusCodes Status { get; set; }
}
所以在JSON中我的BatchStatusCode
被序列化为一个字符串,但我希望它是一个整数,因为ENUM具有特定的每个值集(在5的上升)
一个解决方案:我知道我可以将BatchStatusCodes
更改为int
,每当我使用它时,我可以将ENUM转换为整数,但包括ENUM在回复中使它稍微更自我描述。
我希望也许我可以使用一个属性或一些这样的奇特技巧,或者设置一个服务范围的变量来不处理当前的枚举?
答案 0 :(得分:7)
您可以将[Flags]
属性添加到您希望被视为数字的枚举中,例如:
[Flags]
BatchStatusCodes { ... }
否则,您可以使用ServiceStack.Text将所有枚举视为整数:
JsConfig.TreatEnumAsInteger = true;
答案 1 :(得分:1)
<rant>
虽然,我会不惜一切代价避免使用Magic Numbers。想象一下你以后需要支持这项服务,你应该如何记住所有这些数字... </rant>
无论如何,你试着告诉SS使用UseBclJsonSerializers。在AppHost配置方法中添加:
SetConfig(new HostConfig{
// ...
UseBclJsonSerializers = true,
// ...
});
答案 2 :(得分:1)
老问题,我知道,但我在寻找同样的问题时出现了。 如果我们有
public eStatus Status { get; set; }
然后我们只需添加一个
public int StatusId => (int)Status;
(旧语中为public int StatusId { get { return (int)Status } }
)
如果您不想在序列化输出中使用原始内容,则可以将原始内容标记为不可序列化,但请记住,除非您创建等效的setter,否则它不会从该数字反序列化。 / p>