通过将属性转换为List来获取空列表

时间:2014-11-03 14:57:29

标签: c# xml properties

我有以下属性类:

 public class Ctas
    {
        private string _CodAgrup;
        public string CodAgrup
        {
            get { return _CodAgrup; }
            set { _CodAgrup = value; }
        }
        private string _NumCta;

        public string NumCta
        {
            get { return _NumCta; }
            set { _NumCta = value; }
        }

        private string _Desc;
        public string Desc
        {
            get { return _Desc; }
            set { _Desc = value; }
        }

        private string _subctade;
        public string SubCtaDe
        {
            get { return _subctade; }
            set { _subctade = value; }
        }

        private string _Nivel;
        public string Nivel
        {
            get { return _Nivel; }
            set { _Nivel = value; }
        }
        private string _Natur;
        public string Natur
        {
            get { return _Natur; }
            set { _Natur = value; }
        }

        public override string ToString()
        {
            return "CodAgrup = " + CodAgrup + ", NumCta = " + NumCta + ", Desc = " + Desc + ", SubCtaDe = " + SubCtaDe + ", Nivel = " + Nivel + ", Natur = " + Natur;
        }
  #endregion
    }

我已经从这些属性创建了一个XML,所以首先我必须填充属性,然后我得到了我想用来填充属性的下一个方法,第一个问题是,是否正确的方式Im用来填充属性?

然后我应该检索数据并将其写入XML文件,以便将属性数据转换为列表,然后将它们作为属性写入,但是当我调试时,我得到列表为空,为什么 这可能是最好的方法吗?

//Insert n data on properties
static void cuenta(string codagroup, string numcta, string desc, string subctade, string nivel, string natur)
        {
            Ctas cuentas = new Ctas();
            int x = 0;
          while (cuentas.CodAgrup != null)
          { 
                cuentas.CodAgrup.Insert(x, "codagroup");
                cuentas.NumCta.Insert(x, "numcta");
                cuentas.Desc.Insert(x, "desc");
                cuentas.SubCtaDe.Insert(x,"subctade");
                cuentas.Nivel.Insert(x, "nivel");
                cuentas.Natur.Insert(x, "natur");
                x = x + 1;
            }
        }

//Converting propierties data into list
 List<string> coda = cuentas.CodAgrup.GetType().GetProperties().Select(p => p.Name).ToList();
                List<string> ncta = cuentas.NumCta.GetType().GetProperties().Select(p => p.Name).ToList();
                List<string> desc = cuentas.Desc.GetType().GetProperties().Select(p => p.Name).ToList();
                List<string> subdes = cuentas.SubCtaDe.GetType().GetProperties().Select(p => p.Name).ToList();
                List<string> nivel = cuentas.Nivel.GetType().GetProperties().Select(p => p.Name).ToList();
                List<string> natur = cuentas.Natur.GetType().GetProperties().Select(p => p.Name).ToList();
//Create XML from data in list´s
 for (int i = 0; i < coda.Count; i++)
                {
                    xmlWriter.WriteAttributeString("CodAgrup", coda[i]);
                    xmlWriter.WriteAttributeString("NumCta", ncta[i]);
                    xmlWriter.WriteAttributeString("Desc", desc[i]);
//write the atribute when property data exists.
                    if (cuentas.SubCtaDe != null)
                    {
                        xmlWriter.WriteAttributeString("SubCtaDe", subdes[i]);
                    }
                    xmlWriter.WriteAttributeString("Nivel", nivel[i]);
                    xmlWriter.WriteAttributeString("Natur", natur[i]);
                    xmlWriter.WriteEndElement();

                }

1 个答案:

答案 0 :(得分:1)

您的代码令人困惑,但如果我理解正确,这是我看到的第一个错误:

  Ctas cuentas = new Ctas();
  int x = 0;
  while (cuentas.CodAgrup != null)   // cuentas.CodAgrup is null from the beginning!
  { 
        cuentas.CodAgrup.Insert(x, "codagroup");
        cuentas.NumCta.Insert(x, "numcta");
        cuentas.Desc.Insert(x, "desc");
        cuentas.SubCtaDe.Insert(x,"subctade");
        cuentas.Nivel.Insert(x, "nivel");
        cuentas.Natur.Insert(x, "natur");
        x = x + 1;
  }

由于您正在查看全新的Ctas对象,并且没有用于初始化CodAgrup属性的代码,因此它将具有默认值null,因此代码永远不要进入while循环。

即使它是DID,我怀疑这将是一个无限循环,因为你将一个字面值Insert转换为一个字符串属性,并且没有条件我看到cuentas.CodAgrup将永远为空。

至于您的XML生成,为什么不使用内置的XmlSerializer类?即使您需要特定格式,也有一些属性可以让您自定义生成的XML。