如果之前有人问过这个问题,我很抱歉,但我找不到相关的问题。
我正在使用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序列化。