Speed up boot times and Improve Json (De)Serialization performance and reduce memory usage by reusing JsonSerializerSettings (#9670)
This commit is contained in:
@@ -226,7 +226,7 @@ namespace Umbraco.Web.Editors
|
||||
.ToDictionary(pv => pv.Key, pv =>
|
||||
pv.ToDictionary(pve => pve.valueAlias, pve => pve.value));
|
||||
|
||||
return new JsonNetResult { Data = nestedDictionary, Formatting = Formatting.None };
|
||||
return new JsonNetResult(JsonNetResult.DefaultJsonSerializerSettings) { Data = nestedDictionary, Formatting = Formatting.None };
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -273,7 +273,7 @@ namespace Umbraco.Web.Editors
|
||||
GetAssetList,
|
||||
new TimeSpan(0, 2, 0));
|
||||
|
||||
return new JsonNetResult { Data = result, Formatting = Formatting.None };
|
||||
return new JsonNetResult(JsonNetResult.DefaultJsonSerializerSettings) { Data = result, Formatting = Formatting.None };
|
||||
}
|
||||
|
||||
[UmbracoAuthorize(Order = 0)]
|
||||
@@ -281,7 +281,7 @@ namespace Umbraco.Web.Editors
|
||||
public JsonNetResult GetGridConfig()
|
||||
{
|
||||
var gridConfig = Current.Configs.Grids();
|
||||
return new JsonNetResult { Data = gridConfig.EditorsConfig.Editors, Formatting = Formatting.None };
|
||||
return new JsonNetResult(JsonNetResult.DefaultJsonSerializerSettings) { Data = gridConfig.EditorsConfig.Editors, Formatting = Formatting.None };
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -253,19 +253,20 @@ namespace Umbraco.Web
|
||||
ImageCropRatioMode? ratioMode = null,
|
||||
bool upScale = true) => ImageCropperTemplateCoreExtensions.GetCropUrl(imageUrl, Current.ImageUrlGenerator, cropDataSet, width, height, cropAlias, quality, imageCropMode, imageCropAnchor, preferFocalPoint, useCropDimensions, cacheBusterValue, furtherOptions, ratioMode, upScale);
|
||||
|
||||
private static readonly JsonSerializerSettings ImageCropperValueJsonSerializerSettings = new JsonSerializerSettings
|
||||
{
|
||||
Culture = CultureInfo.InvariantCulture,
|
||||
FloatParseHandling = FloatParseHandling.Decimal
|
||||
};
|
||||
|
||||
internal static ImageCropperValue DeserializeImageCropperValue(this string json)
|
||||
{
|
||||
var imageCrops = new ImageCropperValue();
|
||||
ImageCropperValue imageCrops = null;
|
||||
if (json.DetectIsJson())
|
||||
{
|
||||
try
|
||||
{
|
||||
imageCrops = JsonConvert.DeserializeObject<ImageCropperValue>(json, new JsonSerializerSettings
|
||||
{
|
||||
Culture = CultureInfo.InvariantCulture,
|
||||
FloatParseHandling = FloatParseHandling.Decimal
|
||||
});
|
||||
imageCrops = JsonConvert.DeserializeObject<ImageCropperValue>(json, ImageCropperValueJsonSerializerSettings);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -273,6 +274,7 @@ namespace Umbraco.Web
|
||||
}
|
||||
}
|
||||
|
||||
imageCrops = imageCrops ?? new ImageCropperValue();
|
||||
return imageCrops;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,10 +22,19 @@ namespace Umbraco.Web.Mvc
|
||||
public JsonSerializerSettings SerializerSettings { get; set; }
|
||||
public Formatting Formatting { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Default, unchanged JsonSerializerSettings
|
||||
/// </summary>
|
||||
public static readonly JsonSerializerSettings DefaultJsonSerializerSettings = new JsonSerializerSettings();
|
||||
|
||||
public JsonNetResult()
|
||||
{
|
||||
SerializerSettings = new JsonSerializerSettings();
|
||||
}
|
||||
public JsonNetResult(JsonSerializerSettings jsonSerializerSettings)
|
||||
{
|
||||
SerializerSettings = jsonSerializerSettings;
|
||||
}
|
||||
|
||||
public override void ExecuteResult(ControllerContext context)
|
||||
{
|
||||
|
||||
@@ -121,6 +121,10 @@ namespace Umbraco.Web.PropertyEditors
|
||||
return base.ToEditor(property, dataTypeService, culture, segment);
|
||||
}
|
||||
|
||||
private static readonly JsonSerializerSettings LinkDisplayJsonSerializerSettings = new JsonSerializerSettings
|
||||
{
|
||||
NullValueHandling = NullValueHandling.Ignore
|
||||
};
|
||||
|
||||
public override object FromEditor(ContentPropertyData editorValue, object currentValue)
|
||||
{
|
||||
@@ -142,11 +146,8 @@ namespace Umbraco.Web.PropertyEditors
|
||||
Target = link.Target,
|
||||
Udi = link.Udi,
|
||||
Url = link.Udi == null ? link.Url : null, // only save the URL for external links
|
||||
},
|
||||
new JsonSerializerSettings
|
||||
{
|
||||
NullValueHandling = NullValueHandling.Ignore
|
||||
});
|
||||
}, LinkDisplayJsonSerializerSettings
|
||||
);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
@@ -303,17 +303,18 @@ namespace Umbraco.Web.PublishedCache.NuCache.DataSource
|
||||
return s;
|
||||
}
|
||||
|
||||
private static readonly JsonSerializerSettings NestedContentDataJsonSerializerSettings = new JsonSerializerSettings
|
||||
{
|
||||
Converters = new List<JsonConverter> { new ForceInt32Converter() }
|
||||
};
|
||||
|
||||
private static ContentNestedData DeserializeNestedData(string data)
|
||||
{
|
||||
// by default JsonConvert will deserialize our numeric values as Int64
|
||||
// which is bad, because they were Int32 in the database - take care
|
||||
|
||||
var settings = new JsonSerializerSettings
|
||||
{
|
||||
Converters = new List<JsonConverter> { new ForceInt32Converter() }
|
||||
};
|
||||
|
||||
return JsonConvert.DeserializeObject<ContentNestedData>(data, settings);
|
||||
return JsonConvert.DeserializeObject<ContentNestedData>(data, NestedContentDataJsonSerializerSettings);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user