2017-07-29 13 views
0
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として見たいと思っています。 上記の例に間違いや不具合がありますか?C#のサブクラスに新しいメンバーを追加する

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' プロパティを反映してエラーが発生しました。"}

は、

ありがとうございます。

+2

完全な例外を投稿したほうがエラーの原因を示しやすくなります。 – Gusman

+1

内部例外とは何ですか? – dovid

答えて

0

あなたの問題は、SalesFicheクラスのFicheクラスからメンバーFicheLinesを非表示にすることだと思います。隠しが意図されている場合は、新しいキーワードを使用してください。それ以外の場合は、FicheLinesプロパティの名前を変更/削除してください。

0

SalesFicheクラスのプロパティ "FicheLines"の名前を変更する必要があります。私はそれを "SalesFicheLines"でテストしました。これでクラッシュが修正されます。

私はまた、あなたのSaleFicheクラスがすでにFicheLines年代FicheLinesプロパティへのアクセス権を持っているので、SalesFicheで別のFicheLinesプロパティを作成する必要は本当にありません。この

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

に変更することをお勧めします。

関連する問題