.net core JsonSerializer反序列化字节数组

.net core JsonSerializer反序列化字节数组,.net-core,json-deserialization,system.text.json,.net Core,Json Deserialization,System.text.json,当使用Newtonsoft反序列化字节数组时,我们可以通过编写以下代码来实现 var stringValue = Encoding.UTF8.GetString(byteArray); T data = JsonConvert.DeserializeObject<T>(stringValue); var stringValue=Encoding.UTF8.GetString(byteArray); T data=JsonConvert.DeserializeObject(str

当使用Newtonsoft反序列化字节数组时,我们可以通过编写以下代码来实现

 var stringValue = Encoding.UTF8.GetString(byteArray);
 T data = JsonConvert.DeserializeObject<T>(stringValue);
var stringValue=Encoding.UTF8.GetString(byteArray);
T data=JsonConvert.DeserializeObject(stringValue);

但是如何使用System.Text.Json实现等效的?知道它正在编码UTF8吗?

这是一个如何使用UTF8字符串的字节数组反序列化的工作示例(使用System.Text.Json):

类程序
{
静态void Main(字符串[]参数)
{
尝试
{
字符串str=“{\'MyProperty1\':\'asd\',\'MyProperty2\':2}”;
byte[]utfBytes=Encoding.UTF8.GetBytes(str);
var jsonUtfReader=新的Utf8JsonReader(utfBytes);
ModelDTO ModelDTO=JsonSerializer.Deserialize(参考jsonUtfReader);
WriteLine($“第一个:{modelDTO.MyProperty1},第二个:{modelDTO.MyProperty2}”);
}
捕获(例外情况除外)
{
控制台写入线(例如消息);
}
}
}
模型

public class ModelDTO
{
    public string MyProperty1 { get; set; }
    public int MyProperty2 { get; set; }      
}
输出:

第一名:asd,第二名:2


你看过文件了吗?您可以像这样使用
Utf8JsonReader
反序列化:
var utf8Reader=new Utf8JsonReader(jsonUtf8Bytes)
weatherForecast=JsonSerializer.Deserialize(参考utf8Reader)我做的第一件事是看那个例子,但它不起作用:(我传递字节[]而且不确定为什么它不是反序列化的。你得到了一个你没有与我们共享的异常?或者你得到了你没有与我们共享的意外结果?@helloworld这个例子很有效。如果没有,每个使用ASP.NET Core 3.1的人都会注意到。发布你实际尝试过的,任何错误和示例数据Hi,这样我就得到了没有错误。当我反序列化对象时,它返回默认值。我正在传递Azure Service Bus消息正文,它是一个字节数组。你为什么构造
utfString
?@Joelius除了清晰之外,没有其他原因,我们也可以这样做:
byte[]utfBytes=Encoding.UTF8.GetBytes(str)
我认为这一点也不清楚。C#中的字符串都是UTF-16,不管你如何构造它们。因此,这只是一个不必要的操作,它以复杂的方式克隆字符串,我觉得这很混乱,没有什么帮助。