-
Notifications
You must be signed in to change notification settings - Fork 5
@Json Tag
William David Cossey edited this page Jun 7, 2020
·
4 revisions
| Required Version |
|---|
0.2.x |
RazorEngineCore.Extensions supports @Json tags using a custom RazorEngineCoreJsonWriter class.
RazorEngineCoreJsonWriter like AspNetCore uses System.Text.Json.JsonSerializer for JSON serialization, this is to ensure the same behaviour as Razor Pages in AspNetCore and to reduce dependencies (w/o the need for Newtonsoft.Json).
Input:
@Json(new { Title = "My Title", Description = "This is a description", Null = (object)null }) Output:
{"Title":"My Title","Description":"This is a description","Null":null}As the @Json writer is not injected via IoC configuration is different to that of a standard .Net Core application.
WriteIndented : false;
AllowTrailingCommas : false;
IgnoreNullValues : false;
MaxDepth : 64;
DefaultBufferSize : 16 * 1024; //16KB
IgnoreReadOnlyProperties : false;
PropertyNameCaseInsensitive : false;You can configure the @Json settings for the entire scope of your template.
@inherits RazorEngineCore.RazorEngineCorePageModel
@{
Json.WriteIndented(true)
.AllowTrailingCommas(true)
.IgnoreNullValues(false)
.MaxDepth(64)
.DefaultBufferSize(16 * 1024)
.IgnoreReadOnlyProperties(false)
.PropertyNameCaseInsensitive(false);
}Alternatively you can use in-line settings, these will inherit the Global/Defaults unless specified in the parameters.
@Json.Serialize(new { Title = "My Title" },
allowTrailingCommas: false,
defaultBufferSize: 16 * 1024,
ignoreNullValue: false,
ignoreReadOnlyProperties: true,
maxDepth: 64,
propertyNameCaseInsensitive: true,
writeIndented: false)@json configuration can also be mixed between global and in-line.
@inherits RazorEngineCore.RazorEngineCorePageModel
@{
var jsonObject = new { Title = "My Title", Description = "This is a description", Null = (object)null };
Json.WriteIndented(true)
.AllowTrailingCommas(false)
.IgnoreNullValues(true)
.MaxDepth(64)
.DefaultBufferSize(8 * 1024)
.IgnoreReadOnlyProperties(false)
.PropertyNameCaseInsensitive(true);
}
<code>
@Json.Serialize(jsonObject,
allowTrailingCommas: false,
ignoreNullValue: true,
maxDepth: 32,
writeIndented: true)
</code>
<code>
@Json.Serialize(jsonObject,
defaultBufferSize: 4 * 1024,
ignoreReadOnlyProperties: true,
propertyNameCaseInsensitive: false,
writeIndented: false)
</code>