Json.NET异步支持自定义JsonConverter

时间:2018-04-02 11:21:52

标签: c# .net json json.net

Json.NET version 10 added support to async序列化。 Version 11添加了对通用JsonConverter<T>的支持。

问题在于JsonConverter<T>和之前的JsonConverter仅支持同步方法。

即:public override void WriteJson(...)

传递给JsonWriter的{​​{1}}支持同步和异步方法,如:

WriterJsonwriter.WritePropertyNameAsync()

但由于writer.WritePropertyName()本身是同步的,因此这里不能使用async选项。

是否可以使用异步方法定制WriteJson

1 个答案:

答案 0 :(得分:0)

此代码在dotnet core 2.1中对我有用:

    public static async Task<string> SerializeJsonAsync(object value)
    {
        using (var ms = new MemoryStream())
        using (var sr = new StreamReader(ms))
        using (var sw = new StreamWriter(ms, new UTF8Encoding(false), 1024, true))
        using (var jtw = new JsonTextWriter(sw) { Formatting = Formatting.None })
        {
            var js = new JsonSerializer();
            js.Serialize(jtw, value);
            await jtw.FlushAsync();
            await jtw.CloseAsync();
            ms.Position = 0;
            string s = await sr.ReadToEndAsync();
            return s;
        }
    }