【问题标题】:How to Set Max Json Length in .net core如何在 .net core 中设置最大 Json 长度
【发布时间】:2019-08-28 11:15:29
【问题描述】:

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

【问题讨论】:

标签: c# .net asp.net-core .net-core


【解决方案1】:

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

当微软需要使用DataContractJsonSerializer,当NetwontSoft have a look at mel-green's solution,你可以用字节大小代替进度,如果大则抛出错误。另一种选择是使用选项并设置自己的ITraceWriter,它不会交易,但在大时会抛出错误。

提示,在使用 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 的实现以监视您的大小,但这不是您所要求的,因为它不能解决整个流。

【讨论】:

    【解决方案2】:

    您可以在序列化级别处理此问题。您是否尝试过执行以下操作?

    // Creates an instance of your JavaScriptSerializer
    // and Setting the MaxJsonLength
    
       var serializer = new JavaScriptSerializer() { MaxJsonLength = 86753090 };
    
    // Perform your serialization
    
       serializer.Serialize("Your JSON Contents");
    

    【讨论】:

    • JavaScriptSerializer 尚未移植到 .NET Core,因此此答案在那里不起作用。鉴于 MSFT 正在开发新的序列化程序system.text.json,它不太可能被移植。
    猜你喜欢
    • 2012-09-27
    • 2020-01-06
    • 2015-02-16
    • 1970-01-01
    • 2021-08-03
    • 2012-09-16
    • 2018-08-31
    • 2011-02-01
    • 2013-11-02
    相关资源
    最近更新 更多