首页 > 解决方案 > 有没有办法可以在构造 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 的方法?

标签: c#

解决方案


您不能“新建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
}

推荐阅读