在C#中添加子类中的新成员

时间:2017-07-29 23:58:52

标签: c# serialization xmlserializer

namespace ClassesRa.Classes
{
    public class FicheLine
    {
        public int ItemRef { get; set; }
        public double Amount { get; set; }
        public string UnitCode { get; set; }
    }

    public class Fiche
    {
        public List<FicheLine> FicheLines { get; set; }
        public Fiche()
        {
            FicheLines = new List<FicheLine>();
        }
        public string ClientCode { get; set; }       
    }


    public class SalesFicheLine : FicheLine
    {
        public decimal Price { get; set; }
    }

    public class SalesFiche : Fiche
    {
        public List<SalesFicheLine> FicheLines { get; set; }
        public SalesFiche()
        {
            FicheLines = new List<SalesFicheLine>();
        }
        public string PayCode { get; set; }
    }
}

我想从Fiche派生SalesFiche并添加新成员。 我想从FicheLine派生SalesFicheLine并添加新成员。 我想在SalesFiche中看到SalesFicheLine为FicheLine。 上面的例子中是否有错误或缺陷?

namespace ClassesRa
{
    public partial class fMain : Form
    {
        public fMain()
        {
            InitializeComponent();
        }

        private void fMain_Load(object sender, EventArgs e)
        {
            SalesFiche f = new SalesFiche();
            f.ClientCode = "120.001";
            f.PayCode = "30";
            f.FicheLines.Add(new SalesFicheLine() { ItemRef = 1, Amount = 10, UnitCode = "PK", Price = 100 });

            string xmlString = SerializeToString(f);
        }

        public string SerializeToString(object obj)
        {
            string str = "";
            XmlSerializer serializer = new XmlSerializer(obj.GetType());
            using (StringWriter writer = new StringWriter())
            {
                serializer.Serialize(writer, obj);
                str = writer.ToString();
            }
            return str;
        }
    }
}

当我尝试使用SerializeToString函数将其转换为XML时,会出现以下错误:

  

{“反映财产'FicheLines'的错误。”}

谢谢..

1 个答案:

答案 0 :(得分:0)

您必须在SalesFiche类中重命名属性“FicheLines”。我用“SalesFicheLines”测试了它。这将解决崩溃问题。

我还建议您将SaleFiche类更改为此

   public class SalesFiche : Fiche
    {
        public SalesFiche()
            :base()
        {
        }
        public string PayCode { get; set; }
    }

您已经可以访问FicheLines的FicheLines属性,因此无需在SalesFiche中创建另一个FicheLines属性。