XML 序列化:class 在 class 内

XML serialization: class within a class

我正在使用 xml 进行序列化,我只使用了一个简单的 class,但是当我制作了一个辅助 class,其中简单的 class ] 只是一个组件,序列化停止工作。它在序列化阶段失败并出现 "Error reflecting type" 错误。代码如下:

public class CustomField
{
    [XmlAttribute("FieldID")]
    public string FieldID;
    [XmlAttribute("FieldValue")]
    public string FieldValue;
    public CustomField() { }
    public CustomField(string fieldID, string fieldValue)
    {
        this.FieldID = fieldID;
        this.FieldValue = fieldValue;
    }
}
[XmlType("Entry")]
public class CustomEntry
{
    [XmlAttribute("Author")]
    public string Author;
    [XmlAttribute("Title")]
    public string Title;
    [XmlAttribute("Trial")]
    public string Trial;
    [XmlAttribute("Responses")]
    public List<CustomField> Responses;
    public CustomEntry() { }
}
public static class EntrySerializer
{
    public static void SerializeObject(this CustomEntry entry, string file)
    {
        var serializer = new XmlSerializer(typeof(CustomEntry));
        using (var stream = File.OpenWrite(file))
        {
            serializer.Serialize(stream, entry);
        }
    }
}

是 Xml 标记的标签问题,还是其他原因?

尝试像这样定义序列化程序:

var serializer = new XmlSerializer(typeof(CustomEntry), new Type[] { typeof(CustomField) });

您需要通知序列化程序它希望序列化的其他类型。

我通常用 XMLRoot 标记(两个地方)。我需要查看 XML 的样本才能给出更好的答案。

[XmlRoot("CustomField")]
public class CustomField
{
    [XmlAttribute("FieldID")]
    public string FieldID;
    [XmlAttribute("FieldValue")]
    public string FieldValue;
    public CustomField() { }
    public CustomField(string fieldID, string fieldValue)
    {
        this.FieldID = fieldID;
        this.FieldValue = fieldValue;
    }
}
[XmlRoot("Entry")]
public class CustomEntry
{
    [XmlAttribute("Author")]
    public string Author;
    [XmlAttribute("Title")]
    public string Title;
    [XmlAttribute("Trial")]
    public string Trial;
    [XmlAttribute("Responses")]
    public List<CustomField> Responses;
    public CustomEntry() { }
}
​