【问题标题】:XmlSerializer saves null-fileXmlSerializer 保存空文件
【发布时间】:2011-11-29 22:25:55
【问题描述】:

我在序列化我的对象时遇到问题。 我实现了 IXmlSerializable 接口并初始化了 XmlSerializer 的对象(例如,序列化器)。 但有时在调用 serializer.Serialize(writer, data) 之后,我的输出文件如下所示:

为什么我会有这样的行为?

public class MyClass : IData
{
        private static readonly XmlSerializer _formatter = new XmlSerializer(typeof(MyData));

    public void Save(string filePath)
        {
            using (StreamWriter writer = new StreamWriter(filePath))
            {
                Save(writer);
                writer.Close();
            }
        }


    public void Save(TextWriter Writer)
        {
            MyData data = GetMyDataObject();

            _formatter.Serialize(Writer, data);
        }

    private MyData GetMyDataObject()
        {
            MyData data = new MyData ();
            foreach (PropertyDescriptor pd in TypeDescriptor.GetProperties(typeof(IData)))
                pd.SetValue(data, pd.GetValue(this));
            return data;
        }
}


    public class MyData : IData, IXmlSerializable
{

    public void WriteXml(System.Xml.XmlWriter writer)
        {
            writer.WriteAttributeString("Number", Number);
            if (HardwareInformation != null)
            {
                writer.WriteStartElement("HWInfoList");
                foreach (KeyValuePair<string, string> kw in HardwareInformation)
                {
                    writer.WriteStartElement("HWInfo");
                    writer.WriteAttributeString("Key", kw.Key);
                    writer.WriteAttributeString("Value", kw.Value);
                    writer.WriteEndElement();
                }
                writer.WriteEndElement();
            }
        }
}
public interface IData
{

Dictionary<string, string> HardwareInformation { get; set; }
string Number { get; set; }
}

【问题讨论】:

  • 请提供更多代码。特别是,您是否正确冲洗和关闭了写入器?
  • 很难说没有代码... p.s。您可以将图片添加到不链接到其他地方的问题中。
  • 请将你已经写好的代码贴出来,你会有更多的机会得到答案。
  • 另外,请发布一些您的输出,而不是发布我们无法阅读的图片。
  • 你选择实现 IXmlSerializable 是因为字典吗?还有其他(更简单的)方法可以实现这一点,例如拥有一个专用于 XmlSerialization 的属性

标签: c# serialization ixmlserializable


【解决方案1】:

你是如何序列化的?这是一个序列化函数的示例

   private XDocument Serialize<T>(object obj)
    {
        XDocument ReturnValue = new XDocument();

        XmlSerializer Serializer = new XmlSerializer(typeof(T));
        System.IO.StringWriter sw = new System.IO.StringWriter();        
        System.IO.StringReader sr; 
        Serializer.Serialize(sw, obj);
        sr = new System.IO.StringReader(sw.ToString());

        ReturnValue = XDocument.Load(sr);

        return ReturnValue;
    }

【讨论】:

    猜你喜欢
    • 2015-01-26
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-27
    • 2014-06-18
    相关资源
    最近更新 更多