簡體   English   中英

串行器的C#XmlSerializer問題。序列化

[英]C# XmlSerializer Problems with serializer.Serialize

長話短說,我正在為學校作業申請ATM。 銀行帳戶信息需要存儲到文件中,以使這些帳戶余額保持最新。

我有兩個問題-(1)在序列化過程中,第49行出現錯誤:

(字段)Account [] RunAccount.acctArray

非靜態字段,方法或屬性“ RunAccount.acctArray”需要對象引用

(2)我的讀入和讀出序列化位置有意義嗎?

我對此很陌生,覺得我不知道自己在做什么,因此所有建議都值得贊賞和歡迎。 謝謝!

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Xml.Serialization;

    namespace Bank_Midterm_Project
    {
        public class RunAccount
         {
    Account[] acctArray = new Account[3];
    private static int i;
    bool acctscreated = false;
    bool acctsloaded = false;
    private object test;

    public static void Main(String[] args)
    {
        RunAccount ra = new RunAccount();
        int input;
        do
        {
            Console.WriteLine("Please enter a choice:");
            Console.WriteLine("1) Populate Accounts");
            Console.WriteLine("2) Load Accounts From File");
            Console.WriteLine("3) Select Account");
            Console.WriteLine("4) Exit");

            input = Convert.ToInt32(Console.ReadLine());

            if (input == 1 && ra.acctscreated == false)
            {
                ra.populateArray();
            }
            else if (input == 2 && ra.acctsloaded == false)
            {
                ra.readArray();
            }
            else if (input == 3 && ra.acctscreated == true)
            {
                ra.pickAccountMenu();
            }
            else if (input == 4)
            {
              Stream FileStream = File.Create("test.xml");
              XmlSerializer serializer = new XMLSerializer(typeof(Account[]));
              serializer.Serialize(FileStream, acctArray);
              FileStream.Close();
            }
            else
            {
                if (input == 1 && ra.acctscreated == true)
                {
                    Console.WriteLine("You have already populated the accounts.  Please try again.");
                }
                else if (input == 2 && ra.acctscreated == true)
                {
                    Console.WriteLine("You have already loaded the accounts.  Please try again.");
                }
                else if (input == 3 && ra.acctscreated == false)
                {
                    Console.WriteLine("You must create the accounts first.  Please try again.");
                }
            }


        } while (input != 5);
            //ATM atm = new ATM();
            //atm.topMenu();



    //ra.writeArray();
    //{

    //}
}

    //private void readArray()
    //{
    //    throw new NotImplementedException();
    public void readArray()
    {
        Stream FileStream = File.OpenRead("test.xml");
        XmlSerializer deserializer = new XmlSerializer(typeof(Account[]));
        acctArray = (Account[])deserializer.Deserialize(FileStream);
        FileStream.Close();
    }
//}


    public void populateArray()
    {
        //int[] acctArray = new int[3];
        //prompt for username
        Console.WriteLine("Please enter three account numbers, separated by spaces:");
        string[] tokens = Console.ReadLine().Split();
        for (int i = 0; i < acctArray.Length; i++)
        {
            acctArray[i] = new Account(tokens[i]);
        }
        acctscreated = true;
    }

    public void pickAccountMenu()
    {
        string sinput = null;
        int input = -1;
        while (input != 4)
        {
            Console.WriteLine("Please enter 0, 1, or 2 for your account.  4 to quit.");
            sinput = Console.ReadLine();
            input = Convert.ToInt32(sinput);
            if (input != -99)
            {
                acctArray[input].menu();
            }
        }
    }
}

internal class XMLSerializer : XmlSerializer
{
    public XMLSerializer(Type type) : base(type)
    {
    }
}

}

使用ra.acctArray 您必須使用類實例變量訪問該屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM