c# - 有没有办法可以在构造 json 序列化程序时设置它的设置?
问题描述
在我的应用程序中,每次使用 JsonSerializer 时,它总是首先出现。
JsonSerializerSettings jsonSerializerSettings = Helpers.JsonSerializer.EscapeHtmlSerializer();
例如:
public void UpdateD(D1 d)
{
JsonSerializerSettings jsonSerializerSettings = Helpers.JsonSerializer.EscapeHtmlSerializer();
...
var serializeJson = JsonConvert.SerializeObject(dconf, jsonSerializerSettings); ;
...
}
在哪里:
public static partial class JsonSerializer
{
public static JsonSerializerSettings EscapeHtmlSerializer()
{
JsonSerializerSettings jsonSerializerSettings = new JsonSerializerSettings
{
StringEscapeHandling = StringEscapeHandling.EscapeHtml
};
return jsonSerializerSettings;
}
}
有没有办法可以简化?例如,我可以制作一个已经具有设置的新 JsonConvert 的方法?
解决方案
您不能“新建JsonConvert
”,因为JsonConvert.SerializeObject
它是一个静态方法,并且静态成员不是多态的。
但是,您可以很容易地做 - 只需编写一个将这两个步骤绑定在一起的方法:
// Inside the Helpers namespace, in JsonConverter class...
public static string SerializeEscapeHtml(object content)
=> JsonConvert.SerializeObject(content, JsonSerializer.EscapeHtmlSerializer());
然后,在您的update
方法中 - 只需执行以下操作:
var serializeJson = Helpers.JsonConverter.SerializeEscapeHtml(dconf);
如果您EscapeHtmlSerializer()
经常使用,您可能会考虑创建一个静态属性并将其初始化一次,而不是JsonSerializerSettings
每次都生成新属性:
public static JsonSerializerSettings EscapeHtmlSerializer {get;} = new JsonSerializerSettings
{
StringEscapeHandling = StringEscapeHandling.EscapeHtml
};
然后将方法更改为
public static string SerializeEscapeHtml(object content)
=> JsonConvert.SerializeObject(content, JsonSerializer.EscapeHtmlSerializer);
这看起来并没有太大的变化,但它应该会稍微改善内存分配,因为现在您JsonSerializerSettings
在程序的整个生命周期中只使用单个实例,而不是每次将某些内容序列化为 json 时都生成它的实例。
更新:
JsonConverter
班级_
namspace Helpers
{
public static class JsonConverter
{
public static string SerializeEscapeHtml(object content)
=> JsonConvert.SerializeObject(content, JsonSerializer.EscapeHtmlSerializer);
}
// Whatever more code you need here
}
JsonSerializer
班级_
namspace Helpers
{
public static class JsonSerializer
{
public static JsonSerializerSettings EscapeHtmlSerializer {get;} = new JsonSerializerSettings
{
StringEscapeHandling = StringEscapeHandling.EscapeHtml
};
}
// Whatever more code you need here
}
推荐阅读
- php - 除了隔离依赖组件测试之外,MOCKING 真的有用吗?
- php - php中没有对话框的自动打印
- php - 重写 php 代码 - 检查日期是否在两个日期之间以检查日期是否在几个月之间
- javascript - 从反应中的img标签中删除格式错误的部分
- jquery - 我在同一页面中有两个 CKEditor。我想隐藏其中一个。我怎样才能做到这一点?
- verilog - 为什么我在 endmodule 附近出现语法错误
- c# - JSON 到 C# 类问题
- android - 在 AndroidManifest.xml 文件中更改并恢复为原始元数据后,Flutter 卡在安装 build\app\outputs\apk\app.apk
- git - 无法完全将分支拉到本地并替换它
- swift - 在 iPad 中呈现 UIActivityController 时应用程序崩溃