XML序列化:类中的类

时间:2015-04-22 23:23:23

标签: c# xml serialization

我正在使用xml进行序列化,并且我只使用了一个简单的类,但是当我创建了一个辅助类时,其中简单的类只是一个组件,序列化停止了工作。它在序列化阶段失败并出现“错误反映类型”错误。代码如下:

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标记的标签问题,还是其他问题?

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

我通常用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() { }
}
​