[英]Deserializing Enums C#
可以将我的枚举字符串动态反序列化为枚举。
在我的 API 和使用我的 API 的应用程序中,我有这个 class。
public static class ErrorCodes
{
public enum General
{
INCORRECT_PASSWORD,
INCORRECT_USERNAME,
INVALID_USERNAME
}
public enum ERRORTYPE_1
{
DATESPAN_NOT_PERMITTED
}
public enum ERRORTYPE_2
{
PERIOD_NOT_ALLOWED
}
}
在我的 API 我有这个。 这是以 JSON 形式发送回我的应用程序的内容。
public class Error
{
public string Message { get; set; }
public Enum Code { get; set; }
public Error() { }
public Error(Enum code)
{
this.Code = code;
}
public Error(string message, Enum code)
{
this.Message = message;
this.Code = code;
}
}
然后我可以像这样返回我的错误。
new Error(ErrorCodes.ERRORTYPE_2.PERIOD_NOT_ALLOWED)
有没有办法让我的枚举分开? 我觉得超级长的枚举错误代码列表不是很干净或可维护。
这篇博客文章几乎是我想做的,但对枚举进行了更多抽象。 https://bytefish.de/blog/enums_json_net/
是否可以将我的枚举字符串动态反序列化为枚举?
如果您要在 dotnet-core 上构建 Web API 项目,那么您链接到的博客中的解决方案效果很好,尽管我会使用标准System.Text.Json
库(si0885EE6333:
using System.Text.Json.Serialization;
namespace Foobar
{
[JsonConverter(typeof(JsonStringEnumConverter))]
public enum Foo
{
Bar = 0,
Baz = 1
}
}
这会将枚举Foo.Bar
转换为客户端上的"Bar"
Bar”,以及服务器上的"Bar" -> Foo.Bar
。
有没有办法让我的枚举分开? 我觉得超级长的枚举错误代码列表不是很干净或可维护。
我不知道我是否可以回答这部分,因为看起来你已经用你的 class 结构做到了。 我对您提供的代码是您的目标还是您当前的代码感到困惑。
有关枚举的序列化和反序列化的更多信息,请查看这篇文章。
当您的Enum
值由 JSON 转换器反序列化并发送回应用程序时,枚举值将转换为Int32
类型。 为了能够将int
或string
值转换为Enum
类型,您应该知道要将值转换/反序列化为的枚举类型。 因此,您要么需要将所有 ErrorCodes 声明为单个 Enum 类型的一部分(这样你就知道目标枚举类型),要么在响应中包含 typeof 枚举值,这样就可以做到Enum.Parse(typeof(TargetEnumType),enumValue)
。 如果您使用的是 C# 8.0,则可以通过如下更新Error
class 来实现后一种方法
public class Error<TEnum> where TEnum:Enum
{
public string Message { get; set; }
public TEnum Code { get; set; }
public Type GetEnumType()
{
return Code?.GetType();
}
public Error() { }
public Error(TEnum code)
{
this.Code = code;
}
public Error(string message, TEnum code)
{
this.Message = message;
this.Code = code;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.