2016-12-18 4 views
0

私の場合、オブジェクトのリストをクラス型のユーザーのリストにシリアル化する問題があります。C#リストXMLのシリアライズ

[Serializable()] 
    public class User 
    { 
     string Fname { get; set; } 
     string Lname { get; set; } 
     string Address { get; set; } 
     string City { get; set; } 
     string State { get; set; } 
     int Zip { get; set; } 
     string Phone { get; set; } 
     string Email { get; set; } 

     public User(string f, string l, string a, string c, string s, int z, string p, string e) 
     { 
      Fname = f; 
      Lname = l; 
      Address = a; 
      City = c; 
      State = s; 
      Zip = z; 
      Phone = p; 
      Email = e; 
     } 

     public User() { } 
    } 

私はXMLファイルにリストをシリアル化するために使用しようとしていますコードは、クラス(ユーザー)の名前と他には何もしてXMLファイルを生成します。

{ 
    string path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 
    string fullpath = System.IO.Path.Combine(path, "Users.txt"); 
    Stream stream = File.OpenWrite(fullpath); 
    XmlSerializer writer = new XmlSerializer(typeof(List<User>)); 

    writer.Serialize(stream, Users); 
} 

正確にここで間違っていますか。ただ明快にするために、これは宿題のためのものです。私はデータをファイルに保存するために何を変えるべきかについて迷っています。ありがとう。

+1

プロパティは、シリアル化するために公開する必要があります。プロパティに8 'public'を追加します。 – jdweng

+0

ありがとう、私はそれらを公開していないことを私はキャッチしていない。 – Arcadic

答えて

1

この

[Serializable()] 
    public class User 
    { 
     public string Fname { get; set; } 
     public string Lname { get; set; } 
     public string Address { get; set; } 
     public string City { get; set; } 
     public string State { get; set; } 
     public int Zip { get; set; } 
     public string Phone { get; set; } 
     public string Email { get; set; } 

     public User(string f, string l, string a, string c, string s, int z, string p, string e) 
     { 
      Fname = f; 
      Lname = l; 
      Address = a; 
      City = c; 
      State = s; 
      Zip = z; 
      Phone = p; 
      Email = e; 
     } 

     public User() { } 
    } 
0

がクラスをデシリアライズ/シリアライズすることができるようにするにしてみてください、シリアライザは、パラメータなしのコンストラクタが必要です。したがって、パラメータのないコンストラクタをクラスにのみ追加する必要があります。

public class User 
    { 
     public string Fname { get; set; } 
     public string Lname { get; set; } 
     public string Address { get; set; } 
     public string City { get; set; } 
     public string State { get; set; } 
     public int Zip { get; set; } 
     public string Phone { get; set; } 
     public string Email { get; set; } 

     // parameterless constructor. There is no need to declare it. 
     public User() { } 
     static void Main(string[] args) 
     { 
      User n = new User(); 
      n.Fname = "fname"; 
      n.Lname = "lname"; 
      n.Address = "address"; 
      n.City = "city"; 
      n.State = "state"; 
      n.Zip = 1; 
      n.Phone = "phone"; 
      n.Email = "email"; 
      SaveXML.SaveData(n, "xml.xml"); 
     } 
     class SaveXML 
     { 
      public static void SaveData(object obj, string filename) 
      { 
       // initialization of XML serializer. 
       XmlSerializer sr = new XmlSerializer(obj.GetType()); 
       // get stream from string 
       TextWriter writer = new StreamWriter(filename); 
       // Serialization 
       sr.Serialize(writer, obj); 
       writer.Close(); 
      } 
     } 
    } 
関連する問題