gpt4 book ai didi

c#/.net core3.0 System.Text.Json - JsonSerializer.SerializeAsync?

转载 作者:行者123 更新时间:2023-12-02 17:38:56 27 4
gpt4 key购买 nike

我创建测试控制台应用程序(使用net core3.0),代码如下:

using System;
using System.IO;
using System.Text.Json;
using System.Threading.Tasks;

namespace TestConsoleApp1
{
class Program
{
async static Task Main(string[] args)
{
var obj = new { Name = "Test", Age = 18 };

string json = string.Empty;
using (var stream = new MemoryStream())
{
await JsonSerializer.SerializeAsync(stream, obj);
stream.Position = 0;
using var reader = new StreamReader(stream);
json = await reader.ReadToEndAsync();
}

Console.WriteLine(json); //output {"Name":"Test","Age":18}, is ok
Console.WriteLine(await GetJson(obj)); //output {}, why?

Console.ReadLine();
}

private static async Task<string> GetJson(object obj)
{
string json = string.Empty;
using (var stream = new MemoryStream())
{
await JsonSerializer.SerializeAsync(stream, obj);
stream.Position = 0;
using var reader = new StreamReader(stream);
json = await reader.ReadToEndAsync();
}
return json;
}
}
}

运行输出

{"姓名":"测试","年龄":18}//确定

{}//为什么?

同样的代码,却输出不同的结果,为什么?

最佳答案

这是因为 System.Text.Json.Serializer.SerializeAsync 是一个泛型方法,它使用泛型参数,而不是运行时类型。

您需要调用:

  • await JsonSerializer.SerializeAsync(stream, obj, obj.GetType()); ;或
  • await JsonSerializer.SerializeAsync<T>(stream, obj);

请注意,此行为与 Json.NET 不同,因为 JsonConvert 的 SerializeObject 使用运行时类型。

<小时/>

测试

代码

async static Task Main(string[] args)
{
var obj = new { Name = "Test", Age = 18 };

Console.WriteLine(await GetJson(obj));
}

private static async Task<string> GetJson(object obj)
{
string json = string.Empty;
using (var stream = new MemoryStream())
{
await JsonSerializer.SerializeAsync(stream, obj, obj.GetType());
stream.Position = 0;
using var reader = new StreamReader(stream);
return await reader.ReadToEndAsync();
}
}

输出

{"Name":"Test","Age":18}
<小时/>

更新

还有更多内容,因为非异步版本 Serialise()不遵守相同的规则,并在明确告知要序列化时反序列化运行时类型 <object> .

关于c#/.net core3.0 System.Text.Json - JsonSerializer.SerializeAsync?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58469794/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com