Asp.net core 在所有模型的所有int属性中,是否将所有带千个分隔符的字符串转换为int,.Net Core?

Asp.net core 在所有模型的所有int属性中,是否将所有带千个分隔符的字符串转换为int,.Net Core?,asp.net-core,middleware,model-binding,typeconverter,Asp.net Core,Middleware,Model Binding,Typeconverter,我正在使用.Net核心MVC2.1 在我们看来,我们的价格是2500000美元 我想在我们的后端模型中使用INT类型,我的意思是没有,。 我想编写一些类似于中间件的东西来做到这一点,而不需要为每个int属性使用ModelBinder属性。 我们如何做呢?创建一个从JsonConverter派生的类,类似于此,可能需要在ReadJson中进行更多验证: public class FormattedStringToIntConverter : JsonConverter { public o

我正在使用.Net核心MVC2.1 在我们看来,我们的价格是2500000美元 我想在我们的后端模型中使用INT类型,我的意思是没有,。 我想编写一些类似于中间件的东西来做到这一点,而不需要为每个int属性使用ModelBinder属性。
我们如何做呢?

创建一个从JsonConverter派生的类,类似于此,可能需要在ReadJson中进行更多验证:

public class FormattedStringToIntConverter : JsonConverter
{
    public override bool CanRead => true;

    public override bool CanWrite => false;

    public override bool CanConvert(Type objectType) => objectType == typeof(string);

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        var token = JToken.Load(reader);
        int.TryParse(token.ToString(), NumberStyles.AllowThousands, CultureInfo.CreateSpecificCulture("en-US"), out var value);
        return value;
    }
}
现在,您可以将属性添加到要使用此转换器的模型属性中:

[JsonConverter(typeof(FormattedStringToIntConverter))]
或者,如果要检查所有字符串,可以更改Startup.cs以包含一些JsonOptions:

services.AddMvc().AddJsonOptions(o => {
    o.SerializerSettings.Converters.Add(new FormattedStringToIntConverter());
})
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

您可以向CanConvert添加更多逻辑,以便只转换真正包含数字的字符串。

一种方法是调整视图中的格式,这样他就省去了数千个分隔符。或者正确定义数据类型。@MartinS。我正在处理后端。你有没有研究过JsonConverter?@MarkusDresch:我知道,但是如何像中间件一样使用它将我所有的字符串属性转换为int,而没有,charsMy项目不是API,它是MVC,可以吗?应该没有任何区别