为什么我的反序列化对象为空

本文关键字:对象 反序列化 我的 为什么 | 更新日期: 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