首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >序列化包含空值的字典时YAXLib崩溃

序列化包含空值的字典时YAXLib崩溃
EN

Stack Overflow用户
提问于 2016-04-06 22:55:02
回答 1查看 100关注 0票数 1

我正在使用YAXLib序列化我的对象,我在YAXLib源代码中发现了以下错误:

如果我试图序列化一个包含null值的字典,我会得到一个未处理的nullReference异常。

代码语言:javascript
复制
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,我发现了以下代码:

代码语言:javascript
复制
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);
  ...
}

你们中的一些人也面临着同样的问题?有没有办法解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2016-04-07 00:11:27

您可以过滤掉null对象,这样它们就不会被输入到序列化程序中:

代码语言:javascript
复制
var newdata = data.Where(kvp => kvp.Value != null).ToDictionary(kvp => kvp.Key, kvp => kvp.Value);

或者,您可以创建一个新对象并将所有空值设置为该对象的实例:

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36454823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档