我使用YAXLib序列化我的对象,我在YAXLib源代码中发现以下错误:
如果我尝试序列化包含空值的字典,则会出现未处理的nullReference
异常。
Dictionary<string, object> Dict= new Dictionary<string, object>();
Dict.Add("foo", null);
YAXSerializer serializer = new YAXSerializer(typeof (Dictionary<string, object>));
serializer.SerializeToFile(Dict, "path"); // << CRASH
在YAXSerializer.cs中深入运行,我找到了以下代码:
foreach (object obj in dicInst) //dicInst is the Dict variable defined above
{
...
// valueObj is null
XElement addedElem = AddObjectToElement(elemChild, valueAlias, valueObj);
...
}
private XElement AddObjectToElement(XElement elem, XName alias, object obj)
{
//obj is null and so obj.GetType() crash
UdtWrapper udt = TypeWrappersPool.Pool.GetTypeWrapper(obj.GetType(), this);
...
}
你们有些人遇到同样的问题? 有办法解决吗?
答案 0 :(得分:0)
您可以过滤掉空对象,以便它们不会被送入序列化程序:
var newdata = data.Where(kvp => kvp.Value != null).ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
或者您可以创建一个新对象并将所有空值设置为该对象的实例:
var newdict = dict.Select(kvp => kvp = new KeyValuePair<string, object>(kvp.Key, kvp.Value == null ? new NullObject() : kvp.Value)).ToDictionary(kvp => kvp.Key, kvp => kvp.Value);