为什么我的反序列化对象为空
本文关键字:对象 反序列化 我的 为什么 | 更新日期: 2023-09-27 18:01:54
我只是想使用Serialization
属性来临时存储字符串中的数据。我测试了许多方法,这些函数是我可以使用的(因为在我的实际类中,我有ObjectId,很多序列化类不起作用)。
然而,即使用一个简单的测试它也不起作用,我的反序列化是空的:
public class MyClass
{
public string test = "bob";
}
static public void function()
{
MyClass test = new MyClass();
string data = Newtonsoft.Json.JsonConvert.SerializeObject(test);
object testb = Newtonsoft.Json.JsonConvert.DeserializeObject(data);
MyClass testa = Newtonsoft.Json.JsonConvert.DeserializeObject(data) as MyClass;
}
结果是(debugger
):
datab : { "test": "bob"}
testa is null.
为什么?如何将具有键和值的对象(如testb)转换为正确的类型?
问题是你的类型转换方式。
试试这个,应该没问题
MyClass testa = Newtonsoft.Json.JsonConvert.DeserializeObject<MyClass>(data);
使用通用的反序列化方法:
MyClass testa = Newtonsoft.Json.JsonConvert.DeserializeObject<MyClass>(data);
你应该用公共的getter和setter来定义你的类:
public class MyData
{
public string Name {get; set;}
}
然后,创建一个类的实例并序列化它:
var data = new MyData() { Name = "bob" };
var serialized = JsonConvert.SerializeObject(data);
Console.WriteLine(serialized);
反序列化时,可以使用DeserializeObject<T>
告诉JSON。. NET要反序列化回哪个类型:
var deserialized = JsonConvert.DeserializeObject<MyData>(serialized);
Console.WriteLine(deserialized.Name);
Live fiddle: https://dotnetfiddle.net/w4B1IK