如何在System.Text.Json中序列化泛型对象(从Newtonsoft迁移)



如果之前有人问过这个问题,我很抱歉,但我找不到相关的问题。

我正在使用Newtonsoft序列化这样的类型:

class MyClass {
object Val { get; set; }
}

Val属性是从另一个程序集设置/提供给我的,我不知道它在编译时会是什么。

在Newtonsoft中,我能够串行化为一个字节数组,如下所示:

MyClass obj = someObjFromSomewhere;
return Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(obj);

System.Text.Json中,我尝试过:

return System.Text.Json.JsonSerializer.SerializeToUtf8Bytes(obj);

但是这个崩溃了:

"不支持"MyClass.Val"上的集合类型"System.Object">

事实上,object在这里没有被列为支持的类型

我在.NET Core 3.1中工作。

我该怎么做?我应该创建一个自定义转换器吗?

更新:这只是当我第一次将数据从.NET Framework进程发送到.NET Core进程(通过Newtonsoft进行序列化(,然后将其从.NET Core发送到其他地方时的问题,这次是使用System.Text.Json进行序列化;对象";。

然而,这在Newtonsoft奏效了。

这对我很有用。请注意,我将Val作为一个公共属性来获取json中的值。

using System;
using System.Diagnostics;
using Xunit;
namespace SerializeTests {
public class SerializeIt {
[Fact]
public void SerializeToString() {
MyClass objToTry = new MyClass();
string serialized = System.Text.Json.JsonSerializer.Serialize(objToTry);
// works 
Debug.WriteLine(serialized);// {"Val":null}
}
[Fact]
public void SerializeToBytes() {
MyClass objToTry = new MyClass();
byte[] bytes = System.Text.Json.JsonSerializer.SerializeToUtf8Bytes(objToTry);
// works 
Debug.WriteLine($"total bytes: {bytes.Length.ToString()}");  // total bytes: 12
Debug.WriteLine(Convert.ToBase64String(bytes)); // eyJWYWwiOm51bGx9
}
}
class MyClass {
public object Val { get; set; }
}
}

此外,由于您不控制Val属性的设置,您可能会遇到问题,因为该对象可能无法完全序列化到JSON或从JSON序列化。

相关内容

  • 没有找到相关文章

最新更新