XmlSerializer的节省空文件 [英] XmlSerializer saves null-file

查看:189
本文介绍了XmlSerializer的节省空文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有我的序列化对象的问题。
我实现的IXmlSerializable接口和初始化的XmlSerializer的对象(例如,序列化)。
,而调用serializer.Serialize(作家,数据)后,有时我的输出文件看起来像这样:



为什么我有这样的行为?

 公开MyClass类:IData的
{
私人静态只读XmlSerializer的_formatter =新的XmlSerializer(typeof运算(迈德特));

公共无效保存(字符串文件路径)
{$ B $使用B(StreamWriter的作家=新的StreamWriter(文件路径))
{
保存(作家);
writer.Close();
}
}


公共无效保存(TextWriter的作家)
{
MyData的数据= GetMyDataObject();

_formatter.Serialize(作家,数据);
}

私人迈德特GetMyDataObject()
{
MyData的数据=新迈德特();
的foreach(在TypeDescriptor.GetProperties PropertyDescriptor的PD(typeof运算(IData的)))
pd.SetValue(数据,pd.GetValue(本));
返回数据;
}
}


公共类迈德特:IData的,IXmlSerializable的
{

公共无效中WriteXML(的System.Xml。 XmlWriter的作家)
{
writer.WriteAttributeString(编号,编号);
如果(HardwareInformation!= NULL)
{
writer.WriteStartElement(HWInfoList);
的foreach(KeyValuePair<字符串,字符串>千瓦HardwareInformation)
{
writer.WriteStartElement(HWINFO);
writer.WriteAttributeString(键,kw.Key);
writer.WriteAttributeString(值,kw.Value);
writer.WriteEndElement();
}
writer.WriteEndElement();
}
}
}
公共接口IData的
{

&字典LT;字符串,字符串> HardwareInformation {搞定;组; }
串号{搞定;组; }
}


解决方案

你是如何序列化?这里是一个序列化功能



 私人的XDocument序列化和LT的例子; T>(obj对象)
{
的XDocument返回值=新的XDocument();

XmlSerializer的串行器=新的XmlSerializer(typeof运算(T));
System.IO.StringWriter SW =新System.IO.StringWriter();
System.IO.StringReader SR;
Serializer.Serialize(SW,OBJ);
SR =新System.IO.StringReader(sw.ToString());

返回值= XDocument.Load(SR);

返回返回值;
}


I have a problem with serializing my objects. I implemented IXmlSerializable interface and initialize object of XmlSerializer(for example, serializer). But sometimes after calling serializer.Serialize(writer, data) my output file looks like this:

why do I have such behavior?

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; }
}

解决方案

How are you serializing? Here is an example of a Serialize Function

   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;
    }

这篇关于XmlSerializer的节省空文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆