mjk*_*026 2 c# xml serialization
这是我的序列化/反序列化的类.
public class MyDic
{
...
[XmlElement(IsNullable = true)]
public List<WebDefinition> WebDefinitions;
...
}
Run Code Online (Sandbox Code Playgroud)
它是结构的完整定义WebDefinition.
public struct WebDefinition
{
public string Definition;
public string URL;
public WebDefinition(string def, string url)
{
Definition = def;
URL = url;
}
public override string ToString() { return this.Definition; }
}
Run Code Online (Sandbox Code Playgroud)
我希望Dictionary.WebDefinitions在反序列化时可以为空.但是当它发生运行时错误
//runtime error : System.InvalidOperationException
XmlSerializer myXml = new XmlSerializer(typeof(Dictionary), "UOC");
Run Code Online (Sandbox Code Playgroud)
为什么我不能用XmlElementAttribute.IsNullable?
注1:
当我删除一行时[XmlElement(IsNullable = true)],它正常工作,没有错误.(序列化和反序列化).
note2:
异常是System.InvalidOperationException,消息是:"error occured in during reflection 'UOC.DicData' type"
谢谢.
正如我在评论中指出的那样"特别是InnerException"; 因为你没有添加这个,我运行了样本,最里面的InnerException是:
IsNullable may not be 'true' for value type WebDefinition. Please consider using Nullable<WebDefinition> instead.
我想,这可以告诉你所需要的一切.改变它WebDefinition?(也Nullable<WebDefinition>确实修复它.
但关键点在于:阅读异常和InnerException.
IMO,这里更好的"修复"就是让它成为一个class; 因为WebDefinition它不是一个"价值",它没有任何业务struct
(特别是一个公共可变字段的结构是......邪恶的):
public class WebDefinition
{
public WebDefinition(){} // for XmlSerializer
public string Definition { get; set; }
public string URL { get; set; }
public WebDefinition(string def, string url)
{
Definition = def;
URL = url;
}
public override string ToString() { return this.Definition; }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2374 次 |
| 最近记录: |