Serializacja obiektu zawierającego DataSet

0

Witam
Mam problem z serializacją poniższej klasy Settings (serializuje się wszystko oprócz obiektu klasy VoipAccounts opisanej poniżej). Czy możliwe jest serilizowanie obiektu zawierającego DataSet tak jak próbuję to robić poniżej?

  [Serializable]
    public class Settings
    {
        string resellerLogin;
        string destinationDirectory;
        VoipAccounts voipAccountsData;

        private static Settings instance;

        public string ResellerLogin
        {
            get { return resellerLogin; }
            set { resellerLogin = value; }
        }

        public string DestinationDirectory
        {
            get { return destinationDirectory; }
            set { destinationDirectory = value; }
        }

        public VoipAccounts VoipAccountsData
        {
            get { return voipAccountsData; }
            set { voipAccountsData = value; }
        }


        public static Settings Load()
        {
            Settings settings;
            FileStream stream = new FileStream("settings.xml", FileMode.Open);
            XmlSerializer serializer = new XmlSerializer(typeof(Settings));
            settings = (Settings)serializer.Deserialize(stream);
            stream.Close();
            instance = settings;
            return settings;
        }

        public void Save()
        {
            FileStream stream = new FileStream("settings.xml", FileMode.Create);
            XmlSerializer serializer = new XmlSerializer(typeof(Settings));
            serializer.Serialize(stream, this);
            stream.Close();
        }

        public static Settings Instance
        {
            get
            {
                if (instance != null)
                    return instance;
                else
                {
                    Load();
                    return instance;
                }
            }
        }
    }
 
public class VoipAccounts
    {
        private DataTable voipAccountsTable;
        private DataSet voipAccountsDataSet;
    

        // Properties
        public DataSet VoipAccountsProperty
        {
            get { return voipAccountsDataSet; }
        }


        // Constructor
        public VoipAccounts()
        {
            // Create Tables
            voipAccountsTable = new DataTable("VoipAccountsTable");
            voipAccountsTable.Columns.Add("VoipLogin");
            voipAccountsTable.Columns.Add("VoipPassword");
            voipAccountsTable.Columns.Add("TelephoneNumber");
            voipAccountsTable.Columns.Add("SubscriberName");

            // Create a DataSet and add tables
            voipAccountsDataSet = new DataSet("VoipAccountsTableDataset");
            voipAccountsDataSet.Tables.Add(voipAccountsTable);
        }


        // Flush DataSet data
        public void ClearData()
        {
            voipAccountsDataSet.Clear();
        }

        // Add row to the DataTable
        public void AddAccount(string voiplogin, string voipPassword, string telephoneNumber, string subscribernumber)
        {
            voipAccountsTable.Rows.Add(voiplogin, voipPassword, telephoneNumber, subscribernumber);
            voipAccountsDataSet.Tables["VoipAccountsTable"].AcceptChanges();
        }
    }
 
0

Tą drugą klasę też musisz oznaczyć atrybutem serializable

0

Też na to już wpadłem, ale to nie pomaga. W dalszym ciągu wygenerowany xml wygląda tak jak poniżej:

<?xml version="1.0"?>
<Settings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <ResellerLogin>5</ResellerLogin>
  <DestinationDirectory>2</DestinationDirectory>
  <VoipAccountsData />
</Settings>
0

Już wiem o czym zapomniałem. Oprócz atrybutu klasa "wewnętrzna" również musi mieć rozpisane wszystkie właściwości dla zmiennych.

1 użytkowników online, w tym zalogowanych: 0, gości: 1