Asp.net core 类型转换器在asp.net内核中不工作

Asp.net core 类型转换器在asp.net内核中不工作,asp.net-core,asp.net-core-mvc,asp.net-core-1.0,coreclr,Asp.net Core,Asp.net Core Mvc,Asp.net Core 1.0,Coreclr,我将金额作为十进制存储在数据库中。我想在UI上用千分隔符显示该值。我可以在amount属性上添加[DisplayFormat(DataFormatString=“{0:N2}”,ApplyFormatInEditMode=true)]属性,该属性将显示带有千位分隔符的数字。但是,当我将值发布回服务器时,MVC模型绑定将因逗号而无法工作 我创建了一个自定义类型转换器,它可以从decimal转换为string,然后再从string转换为decimal public class NumberConve

我将
金额
作为
十进制
存储在数据库中。我想在UI上用千分隔符显示该值。我可以在amount属性上添加
[DisplayFormat(DataFormatString=“{0:N2}”,ApplyFormatInEditMode=true)]
属性,该属性将显示带有千位分隔符的数字。但是,当我将值发布回服务器时,MVC模型绑定将因逗号而无法工作

我创建了一个自定义类型转换器,它可以从
decimal
转换为
string
,然后再从
string
转换为
decimal

public class NumberConverter:TypeConverter
{
公共覆盖布尔CanConvertFrom(
ITypeDescriptorContext上下文,
类型(源类型)
{
if(sourceType==typeof(十进制))
{
返回true;
}
返回base.CanConvertFrom(上下文,sourceType);
}
公共重写对象转换自(ITypeDescriptorContext上下文,
文化信息(文化,对象值)
{
if(值为十进制)
{
返回string.Format(“{0:N2}”,value);
}
返回base.ConvertFrom(上下文、区域性、值);
}
公共覆盖布尔CanConvertTo(ITypeDescriptorContext上下文,
类型destinationType)
{
if(destinationType==typeof(decimal))
{
返回true;
}
返回base.CanConvertTo(上下文,destinationType);
}
公共重写对象转换为(ITypeDescriptorContext上下文,
CultureInfo区域性,对象值,类型destinationType)
{
if(destinationType==typeof(decimal)&&值为字符串)
{
返回擦洗(value.ToString());
}
返回base.ConvertTo(上下文、区域性、值、destinationType);
}
私有十进制擦洗(字符串模型值)
{
NumberStyles\u currencyStyle=NumberStyles.Currency;
CultureInfo_culture=新的CultureInfo(“美国”);
var modelDecimal=0M;
锥虫(
模型值,
_货币风格,
_文化,,
出模十进制
);
返回模式十进制;
}
}
然后我把它应用到一个模型属性上。请注意,模型可能具有其他十进制属性,这些属性可能不需要此转换

公共类MyModel
{
[TypeConverter(typeof(NumberConverter))]
[显示(Name=“输入金额”)]
公共十进制数{get;set;}
公共字符串名称{get;set;}
}
Index.cshtml


@EditorFor(m=>m.Amount)
拯救

但是,转换器代码永远不会被触发。当我在
NumberConverter
中输入断点时,没有一个断点命中。我需要在任何地方注册类型转换器吗?我正在使用asp.net内核

根据我的观察,
asp.net核心
没有考虑属性
类型转换器
修饰

因此,它只支持修饰实际类型的
TypeConverters

有效

[TypeConverter(typeof(MyModelStringTypeConverter))]
public class MyModel
{

}
不起作用

public class OtherModel
{
    [TypeConverter(typeof(MyModelStringTypeConverter))]
    public MyModel MyModel { get;set; }
}

我遇到了同样的问题-在模型中,我有一组我想从字符串解析的值-到目前为止,我想出了编写简单的转换器并从
Startup
以这种方式“注册”它:
TypeDescriptor.AddAttributes(typeof(IReadOnlyCollection),newTypeConverterAttribute(typeof(FooTypeConverter));
…但我不太喜欢这种方法:(我注意到,
TypeConverter
可用于
Json.net
序列化,但不能用于
System.Text.Json
,这是ASP.net Core中的默认值。我们在数据协定中使用自定义
Date
结构作为字段,并希望在POST方法体中接收它。默认.net Core序列化程序无法绑定请求的类型,因此数据契约类是
null
。切换到Json.net解决了这个问题。