这是要序列化/反序列化的类。

public class MyDic
{
    ...

    [XmlElement(IsNullable = true)]
    public List<WebDefinition> WebDefinitions;

    ...
}

这是结构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; }
}

我希望在反序列化时Dictionary.WebDefinitions可以为空。但当
//runtime error : System.InvalidOperationException
XmlSerializer myXml = new XmlSerializer(typeof(Dictionary), "UOC");

为什么我不能使用XmlElementAttribute.IsNullable
注1:
当我删除一行[XmlElement(IsNullable = true)]时,它正常工作,没有错误(序列化和反序列化)。
注2:
异常为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
在我看来,一个更好的“修正”是使它成为一个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; }
}

10-05 22:47