班级成员的序列化

时间:2014-03-01 09:49:46

标签: c# class serialization

请给我一些建议。我已经在命名空间“Xml_form_application”中提出了一个序列化类,它看起来像这样:

namespace Xml_form_application
{
    public class RecordStore
    {
        public MyObject MyObjectProperty;

    }

    public class MyObject
    {
        public string item = "thing";
    }
}

 //Class form2 with button2 to calling this action /serialization)
 private void button2_Click(object sender, EventArgs e)
   {
          RecordStore pd = new RecordStore();
          TextWriter tr = new StreamWriter("C:/Users/admin/Dokumenty/Visual Studio 2010/Projects/Xml_form_application/Xml_form_application/Cvicna.xml");
          XmlSerializer sr = new XmlSerializer(typeof(RecordStore));
          sr.Serialize(tr, pd);
          tr.Close();

   }

在输入中有这个xml代码:

<?xml version="1.0" encoding="utf-8"?>
    <RecordStore xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />

我想用xml代码输入这个输入(我怎样才能达到这个结果):

<RecordStore>
  <MyObjectProperty>
      <item>thing</item>
  </MyObjectProperty>
</RecordStore>

2 个答案:

答案 0 :(得分:0)

<MyObjectProperty><item>thing</item></MyObjectProperty>输出缺失,因为pd.MyObjectProperty的计算结果为空。

默认情况下,XmlSerializer会忽略将序列化为 Elements 的非序列类型的空值。

与:比较:

RecordStore pd = new RecordStore {
    // It's really a Field, not a Property ..
    MyObjectProperty = new MyObject()
};

即使不是必需的,我建议您始终使用[XmlRoot][XmlElement][XmlAttributes]属性,因为它们可以减轻一些重新分解的变化。

答案 1 :(得分:0)

您的MyObjectPropertynull,所以你没有得到那个东西。初始化它以获得预期结果。

RecordStore pd = new RecordStore();
pd.MyObjectProperty = new MyObject();