gpt4 book ai didi

c# - 序列化空引用对象

转载 作者:行者123 更新时间:2023-11-30 17:43:30 24 4
gpt4 key购买 nike

我正在尝试通过遍历其属性并将每个值类型写到字典中来“序列化”某种类型。

serialize(object)
foreach(prop in object.GetType().GetProperties()

value = prop.GetValue(object);
if (prop.PropertyType.isValueType)
writeToDict(prop.Name, value)
else
serialize(value)

给定一个类型

public class ComplexType {
public string Prop1 { get; set; }
public int Prop2 { get; set; }
public OtherType Prop3 { get; set; }
}

public class OtherType {
public string Prop4 { get; set; }
}

现在,当我创建 ComplexType 的实例并尝试“序列化”它时,它工作正常,直到它遍历 Prop3(OtherType).当我尝试对其调用 value.GetType() 时,我遇到了 NullReferenceException,因为当然,从来没有对 Prop3< 的引用集.

有什么办法可以解决这个问题吗?其他序列化框架如何做到这一点? (我的意思是,我什至无法创建该类型的默认实例,因为我不知道运行时的类型!)

哦,是的,我不能跳过属性,因为我对结构感兴趣(即使它没有设置值)。

最佳答案

好吧,我明白了。 NullReferenceException 的发生是因为我太笨了。

对于将来试图获取未初始化引用类型的任何人:

如果您在对象上调用 .GetType(),.NET 框架会在内存中查找该对象的引用。因为该对象还没有被初始化,没有什么可查找的,因此抛出一个 NullReferenceException。如果你想遍历一个实例的属性,你至少需要最上层父类的类型,然后你可以通过 PropertyInfo.PropertyType 获取进一步引用类型属性的类型(而不是直接您从父属性中拉出的对象)。

关于c# - 序列化空引用对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30833929/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com