2017年8月20日 星期日

如何設計成JSON的字串TXT檔,然後透過讀取的方式轉換成物件

在開發遊戲專案時,有時候會用程式寫從TXT讀取來的一些格式,然後從中轉換成JSON的方式。
其實有很多的方法,像是載入CSVXML等,在這裡教一些比較簡單的一些寫法,可以知道要如何去做這樣的設計。

如何設計成JSON的字串TXT檔,然後透過讀取的方式轉換成物件。

1.建立介面上會用到的物件:
//按扭
public Button button1 = new Button();

//顯示結果的Label
public Label resultLabel =new Label();

2.主要初始化的Function

this.button1.Location = new System.Drawing.Point(8220);
this.button1.Name = "btn";
this.button1.Size = new System.Drawing.Size(12030);
this.button1.TabIndex = 1;
this.button1.Text = "Do CSV To JSON";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.click);
         
//初始化一個Label,等一下用來顯示結果用的
this.Controls.Add(this.button1);
this.resultLabel.Location = new System.Drawing.Point(1060);
this.resultLabel.Name = "label1";
this.resultLabel.Text = "";
this.resultLabel.AutoSize = true;
this.Controls.Add(this.resultLabel);

3.設計一個按扭的監聽程式,然後寫下可以呈現結果的程式邏輯:

//讀取csv檔,然後透過System.IO.File.ReadAllLines來讀取每一行的JSON String的格式
string[] lines = System.IO.File.ReadAllLines(@"csvfile.csv");

//在這邊透過foreach把一行的JSON取出
foreach (string line in lines)
{
       Console.WriteLine("JSON String{0}", line);
       this.resultLabel.Text += line+"\n\n";
             
              //轉換成JSON Object的格式
       Player pj = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<Player>(line);
             
            //Object裡的值取出來用,在Label上面編排結果
      this.resultLabel.Text += "JSON Object Id Value"+pj.Id.ToString()+"\n\n";
      this.resultLabel.Text += "JSON Object HP Value"+pj.HP.ToString()+"\n\n";
      this.resultLabel.Text += "JSON Object MP Value"+pj.MP.ToString()+"\n\n";
      this.resultLabel.Text += "JSON Object Skill Value"+pj.Skill.ToString()+"\n\n\n";
}

上面的csvfile.csv,雖然我是採用csv的副檔名,但是在我的範例上,還是用TXT方式去設計。
如果是CSV真正的格式,其實會略有不同,寫法上也要稍作改變,但是其實方式會差不多。
csvfile.csv的內容裡面,會看到看起來像是下面的字串,然後要一行一行的斷行:


{"Id":100,"HP":10,"MP":14,"Skill":"attack"}

裡面有IdHPMPSkill,然後在程式裡面我們定義一個名字叫Player的物件,裡面的變數也定義IdHPMPSkill(型態可以自定)

然後透過下面的這段程式碼作轉換:

System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<Player>(line);


當按扭按下後,就會顯示結果,我們就可以從Player上去使用Id, HP, MP, Skill






上面的範例其實是一個很基本的概念,它可以有很多的變化型式的寫法。
如果是要用CSV的格式,那就要將每一個JSON的字串加上逗點,然後在處理字串時用Split的方式轉成String Array,然後一樣放入Deserialize<Player>(your_string)裡面。

下面是程式碼範例下載,有興趣可以下載:




-雲遊山水為知已、逍遙一生而忘齡電腦神手

沒有留言:

張貼留言