在開發遊戲專案時,有時候會用程式寫從TXT讀取來的一些格式,然後從中轉換成JSON的方式。
其實有很多的方法,像是載入CSV,XML等,在這裡教一些比較簡單的一些寫法,可以知道要如何去做這樣的設計。
如何設計成JSON的字串TXT檔,然後透過讀取的方式轉換成物件。
1.建立介面上會用到的物件:
//按扭
public Button button1 = new Button();
//顯示結果的Label
public Label resultLabel =new Label();
2.主要初始化的Function:
this.button1.Location
= new System.Drawing.Point(82, 20);
this.button1.Name
= "btn";
this.button1.Size
= new System.Drawing.Size(120, 30);
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(10, 60);
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"}
裡面有Id、HP、MP、Skill,然後在程式裡面我們定義一個名字叫Player的物件,裡面的變數也定義Id、HP、MP、Skill(型態可以自定)
然後透過下面的這段程式碼作轉換:
System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<Player>(line);
當按扭按下後,就會顯示結果,我們就可以從Player上去使用Id, HP, MP, Skill。
上面的範例其實是一個很基本的概念,它可以有很多的變化型式的寫法。
如果是要用CSV的格式,那就要將每一個JSON的字串加上逗點,然後在處理字串時用Split的方式轉成String Array,然後一樣放入Deserialize<Player>(your_string)裡面。
下面是程式碼範例下載,有興趣可以下載:
-雲遊山水為知已、逍遙一生而忘齡- 電腦神手
沒有留言:
張貼留言