Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net web api 每个程序集的Newtonsoft JSON默认设置_Asp.net Web Api_Asp.net Core_Json.net - Fatal编程技术网

Asp.net web api 每个程序集的Newtonsoft JSON默认设置

Asp.net web api 每个程序集的Newtonsoft JSON默认设置,asp.net-web-api,asp.net-core,json.net,Asp.net Web Api,Asp.net Core,Json.net,为了自动修剪所有输入字符串并删除新行,我开发了一个JsonConverter的实现,并在Startup中用 JsonConvert.DefaultSettings = () => new JsonSerializerSettings { Converters = new List<JsonConverter> { new StringTrimmer() } }; JsonConvert.DefaultSettings=()=>新的Jso

为了自动修剪所有输入字符串并删除新行,我开发了一个
JsonConverter
的实现,并在
Startup
中用

JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
    Converters = new List<JsonConverter>
    {
        new StringTrimmer()
    }
};
JsonConvert.DefaultSettings=()=>新的JsonSerializerSettings
{
转换器=新列表
{
新的StringTrimmer()
}
};

这是可行的,但字符串修剪器会对第三方程序集产生负面影响。是否有一种方法可以将默认设置范围限定到应用程序的程序集,或使用
jsonvert.Create(mySettings)
注册实例?或者有没有另一种方法可以在不使用JsonConvert的情况下自动修剪所有输入?

如果您只关心更改ASP.NET Core序列化JSON的方式,那么您可以使用以下方法为MVC框架显式配置
JsonSerializerSettings


您可以使用自定义的
ContractResolver
以编程方式仅在某些程序集中应用转换器,如下所示:

public class CustomResolver : DefaultContractResolver
{
    private Assembly[] TargetAssemblies { get; set; }

    public CustomResolver(params Assembly[] targetAssemblies)
    {
        TargetAssemblies = targetAssemblies;
    }

    protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization ms)
    {
        JsonProperty prop = base.CreateProperty(member, ms);

        if (prop.PropertyType == typeof(string) &&
            TargetAssemblies.Contains(prop.DeclaringType.Assembly))
        {
            prop.Converter = new StringTrimmer();
        }

        return prop;
    }
}
然后在如下默认设置中使用它,其中
Foo
将替换为应用程序程序程序集中的一个已知类:

JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
    ContractResolver = new CustomResolver(typeof(Foo).Assembly)
};
如果需要,可以添加多个部件,例如:

JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
    ContractResolver = new CustomResolver(typeof(Foo).Assembly, typeof(Bar).Assembly)
};

使您的
StringTrimmer
了解它正在处理的类型(及其程序集)
WriteJson()
ReadJson()
必须与对象的类型相匹配。仅对您关心的类型应用修剪

JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
    ContractResolver = new CustomResolver(typeof(Foo).Assembly, typeof(Bar).Assembly)
};