【问题标题】:using MySQL to create JSON with C# and JSON.Net使用 MySQL 通过 C# 和 JSON.Net 创建 JSON
【发布时间】:2012-03-11 23:08:39
【问题描述】:

我很难找到一个教程来教我如何使用 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();

【问题讨论】:

  • 我尝试使用数组将每个字段存储在一行中,但我仍然找不到将这些数据存储到模型中的方法

标签: c# mysql json json.net


【解决方案1】:

你几乎做对了。无需过多详细说明,您需要实例化要填充的类:

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

希望对你有帮助。

【讨论】:

    【解决方案2】:

    我不确定填充 ArrayList 的目的是什么,您必须以某种方式通过映射或手动从您的数组列表中填充您的模型。

    对于简单的情况,为什么你不能在这里填充你的模型?

    解决此问题的一种好方法是将模型保存在单独的程序集中,然后您的 DAL 可以引用此程序集以填充适当的类。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-08
      相关资源
      最近更新 更多