【发布时间】:2015-08-30 06:50:46
【问题描述】:
我正在尝试通过迭代其属性来“序列化”某个类型,并将每个值类型写入字典。
伪
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 的引用。
有没有办法解决这个问题?其他序列化框架如何做到这一点? (我的意思是,我什至无法创建该类型的默认实例,因为我不知道运行时的类型!)
哦,是的,我不能跳过该属性,因为我对结构感兴趣(即使它没有设置值)。
【问题讨论】:
-
你想对空引用类型做什么?
-
@YuvalItzchakov 只是'序列化'(用字符串变平)它是字典中的类型结构,如果我能够得到它,值将与它一起存储(尽管这并不重要。 ) 所以我最终会得到一个包含以下内容的字典:
Prop1=30, Prop2=, Prop3.Prop4=(对于上面的示例) -
但是它没有被初始化。该类型没有设置任何值。
标签: c# .net serialization reflection types