2012-02-21 16 views
1

私は、MySqlReader(MySQLで)を使用してクラスオブジェクトを介してデータを挿入または受信する方法を学ぶチュートリアルを見つけようとしています。コンストラクタは以下のように表示されます。MySQLを使用してC#とJSON.NetでJSONを作成する

ここで私はhttp://json2csharp.com/を使ってこれらのクラスを作成しましたが、クラスオブジェクトをJSONにシリアライズ/デシリアライズする方法を知っています。私の問題は、MySqlDataReaderを介してクラスターオブジェクトにデータベースコネクタの内外にある多くの異なるテーブルからデータを取得することに本当にあります。

C#3.0(Visual Studio 2010)で.Net 2.0を使用していますかどうかわかりません。ご意見やご返信ありがとうございます。

public class Boardingzone 
{ 
    public string zone { get; set; } 
    public string time { get; set; } 
} 

public class Serial 
{ 
    public string rsn { get; set; } 
    public List<Boardingzone> boardingzone { get; set; } 
} 

public class RootObject 
{ 
    public string name { get; set; } 
    public List<Serial> serial { get; set; } 
} 

これは私がこれまでに

 string sql = "SELECT Route.RName, RouteSerial.RSN, Stop.StopName, TimeTable.BoardTime FROM TimeTable INNER JOIN Stop ON TimeTable.StopID = Stop.StopID INNER JOIN RouteSerial ON TimeTable.RSN = RouteSerial.RSN INNER JOIN Route ON RouteSerial.RID = Route.RID"; 
     MySqlCommand cmd = new MySqlCommand(sql, conn); 
     MySqlDataReader rdr = cmd.ExecuteReader(); 
     ArrayList name = new ArrayList(); 
     ArrayList rsn = new ArrayList(); 
     ArrayList zone = new ArrayList(); 
     ArrayList time = new ArrayList(); 

     while (rdr.Read()){ 
      string val = ""; 
      val = rdr.GetValue(0).ToString(); 
      name.Add(val); 
      val = rdr.GetValue(1).ToString(); 
      rsn.Add(val); 
      val = rdr.GetValue(2).ToString(); 
      zone.Add(val); 
      val = rdr.GetValue(3).ToString(); 
      time.Add(val); 
     } 
     rdr.Close(); 
    conn.Close(); 
+0

配列内の各フィールドを1行に格納しようとしましたが、これらのデータをモデルに格納する方法がまだ見つかりませんでした – Fy2C

答えて

0

あなたはほとんどそれを正しくやっています。あまり詳しく説明しなくても、入力するクラスをインスタンス化する必要があります。

var currentRoot = null; 
var rootObjects = new List<RootObject>(); 
while (rdr.Read()){ 
     string name= rdr.GetValue(0).ToString(); 
     string serial = rdr.GetValue(1).ToString(); 
     string bz = rdr.GetValue(2).ToString(); <-- made this up 
     if(currentRoot == null || currentRoot.name != name) 
     { 
      if(currentRoot != null){ 
       rootObjects.Add(currentRoot); 
      } 
      currentRoot = new RootObject(); 
      currentRoot.name = name; 
     } 
     currentRoot.serials.Add(new Serial(){zone = bz}); 

     ... instantiate other classes 
    } 
    rdr.Close(); 

foreach(var rootObj in rootObjects) doSomethingWithRootObj(rootObj); 

希望すると助かります。

0

を試してみました私はArrayListのを移入の目的が何であるかわからないが、あなたは何らかの形でマッピングするか、どちらかあなたのArrayListからあなたのモデルを移入する必要があります手動で

単純なケースでは、なぜここにモデルを設定するだけではありませんか?

これを行う良い方法は、モデルを別のアセンブリに保持することです.DALはこのアセンブリを参照して、適切なクラスを生成することができます。

モデルをインターフェイスとして公開することができれば、DALはこれらのインターフェイスのみを使用する必要があり、独自の実装を持つことができます。使用するシリアル化メソッドで可能かどうかは不明です。

関連する問題