2012-02-21 73 views
1

我有相当多的麻烦,试图找到一个教程,将技术我如何使用MySqlReader(与MySQL)通过类对象插入或接收数据。该construtor如下所示。使用MySQL创建JSON与C#和JSON.Net

我在哪里使用http://json2csharp.com/创建这些类我知道如何序列化/反序列化类对象到JSON。我的问题真的在于通过MySqlDataReader将来自大量不同表的数据从数据库连接器中取出并导出到类对象中。

我不知道这个问题,但我使用.NET 2.0与C#3.0(Visual Studio 2010)。提前感谢您的任何评论或回复。

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

我曾尝试使用数组来存储行中的每个字段,但我仍然找不到将这些数据存储到模型中的方法 – Fy2C 2012-02-22 11:56:16

回答

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只需要使用这些接口并且可以拥有自己的实现 - 不知道您使用的序列化方法是否可行。