此问题已在此处有答案:
System.Text.Json: How do I specify a custom name for an enum value?(3个答案)
7天前关闭
我正在使用System.Text.Json.Serialization
我试图反序列化一个在EnumMember
值CheckStatus
中带有破折号的成员。
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.JsonStringEnumConverter))]
public enum CheckStatus
{
[System.Runtime.Serialization.EnumMember(Value = "newFile")]
NewFile,
[System.Runtime.Serialization.EnumMember(Value = "check-status")]
CheckStatus,
}
我写了一个BindModelAsync
public class FileStatusModelBuilder : IModelBinder
{
public Task BindModelAsync(ModelBindingContext bindingContext)
{
var rawData = bindingContext.ValueProvider.GetValue(bindingContext.ModelName).FirstValue;
rawData = JsonSerializer.Serialize(rawData);
CheckStatus result = JsonSerializer.Deserialize<CheckStatus>(rawData);
bindingContext.Result = ModelBindingResult.Success(result);
return Task.CompletedTask;
}
}
当传入newFile
时,绑定工作并将绑定到NewFile
,但当我使用check-status
时,我得到以下错误。
The JSON value could not be converted to [...].CheckStatus. Path: $ | LineNumber: 0 | BytePositionInLine: 15.
我不想使用newtonsoft
,但希望在EnumMember
值中能够有一个带破折号的枚举。
1条答案
按热度按时间l7wslrjt1#
System.Text.Json
似乎仍然不支持System.Runtime.Serialization
(基于this github issue,它似乎不会支持),所以你可以实现自定义序列化器,例如这个github问题的解决方案: