使用MySQL创建带有C#和JSON.Net的JSON

本文关键字:JSON Net MySQL 创建 使用 | 更新日期: 2023-09-27 18:25:15

我很难找到一个教程来教我如何使用MySqlReader(与MySQL一起)通过类对象插入或接收数据。解释者如下所示。

我使用过的地方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();

使用MySQL创建带有C#和JSON.Net的JSON

您几乎做对了。在不涉及太多细节的情况下,您需要实例化要填充的类:

 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);

希望能有所帮助。

我不确定填充ArrayList的目的是什么,您必须通过映射或手动从ArrayList中填充Model。

对于一个简单的例子,为什么你不能在这里填充你的模型?

一个很好的方法是将模型保存在一个单独的程序集中,然后DAL可以引用该程序集来填充适当的类。

更好的是,如果你可以将你的模型公开为接口,那么DAL只需要使用这些接口,并且可以有自己的实现——不确定你使用的序列化方法是否可能做到这一点。