C# 如何在.net core中设置最大Json长度

C# 如何在.net core中设置最大Json长度,c#,.net,asp.net-core,.net-core,C#,.net,Asp.net Core,.net Core,在.net core技术之前,我们可以在web.config中添加maxjson大小。但是在.net core中如何设置最大json大小?在哪里?您需要在序列化级别管理它。不确定您是新的Microsoft Json还是NetwtonSoft Json 当Microsoft需要使用时,您可以用字节大小替换进度,如果太大,则抛出错误。另一种选择是使用选项,并设置自己的选项,该选项不进行交易,但在做大时抛出错误 提示:使用Json时,您可以修饰属性,以便缩短属性名称。像这样: [JsonPropert

在.net core技术之前,我们可以在web.config中添加maxjson大小。但是在.net core中如何设置最大json大小?在哪里?

您需要在序列化级别管理它。不确定您是新的Microsoft Json还是NetwtonSoft Json

当Microsoft需要使用时,您可以用字节大小替换进度,如果太大,则抛出错误。另一种选择是使用选项,并设置自己的选项,该选项不进行交易,但在做大时抛出错误

提示:使用Json时,您可以修饰属性,以便缩短属性名称。像这样:

[JsonProperty("A1")]
private int SomeReallyLongPropertyName;
确保不重复名称,json将通过别名进行映射

另一种缩短json的方法是将其转换为更小的内容

[JsonConverter(typeof(UTCDateTimeConverter))]
[JsonProperty("DT")]
public DateTime Date { get; set; }
转换器:

public sealed class UTCDateTimeConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(DateTime?);
    }
    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        if (reader.Value is null) return null;
        try
        {
            return new DateTime((long)reader.Value);
        }
        catch
        {
            if (DateTime.TryParse(reader.Value.ToString(), out DateTime d))
                return d;
            else
                return null;
        }
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        var val = ((DateTime)value).Ticks;
        writer.WriteValue(val);
    }
}
您还可以装饰要转换的类,以便在其大小过大时发出警告
通过实现上述功能,并将WriteJson的实现更改为监视您的大小,但这并不是您所要求的,因为它无法处理整个流

您可以在序列化级别处理此问题。你试过做下面这样的事情吗

// Creates an instance of your JavaScriptSerializer
// and Setting the MaxJsonLength

   var serializer = new JavaScriptSerializer() { MaxJsonLength = 86753090 };

// Perform your serialization

   serializer.Serialize("Your JSON Contents");

它在这里说,这是不可能做到的,尽管这是一年前的事,所以不确定它是否已经改变了:这可能也有用,因为它没有移植到.NETCore,所以这个答案在那里不起作用。鉴于MSFT正在开发新的序列化程序,它不太可能被移植。