从具有父子关系的Ado.Net生成Json

时间:2018-05-03 08:09:19

标签: mysql json asp.net-core ado.net

由于我们擅长开发在ADO.Net上加入和使用多个表并且好手的存储过程,我们没有选择EF。现在陷入了我们正在寻找ORM需求但仍试图找到简单解决方案的情况:

我们有一个Class Message及其子类,其对象列表为Class URL。现在,我们正在寻找生成这样的JSON:

{
messegid:1,
messege:’Hello’,
messegeurl:
    [
        {url:’http://example.com/1.jpg’},
        {url:’http://example.com/2.jpg’}
    ]
}

我们知道使用EF可以很容易地完成它,但是我们不能使用它。我们使用以下方法生成对象:

public List<T> CreateObject<T>(List<MySqlParameter> parameters, string SPName)
        {
            List<T> t = new List<T>();
            try
            {
                using (MySqlConnection con = new MySqlConnection(connString))
                {
                    using (MySqlCommand cmd = new MySqlCommand(SPName, con))
                    {
                        cmd.CommandType = CommandType.StoredProcedure;

                        foreach (MySqlParameter param in parameters)
                        {
                            cmd.Parameters.Add(param);
                        }

                        con.Open();
                        using (MySqlDataReader reader = cmd.ExecuteReader())
                        {
                            T obj = default(T);
                            while (reader.Read())
                            {
                                obj = Activator.CreateInstance<T>();
                                foreach (PropertyInfo prop in obj.GetType().GetProperties())
                                {
                                    if (prop.PropertyType.Equals(System.Type.GetType("System.String")) || prop.PropertyType.Equals(System.Type.GetType("System.Int32")) || prop.PropertyType.Equals(System.Type.GetType("System.Int64")) || prop.PropertyType.Equals(System.Type.GetType("System.Byte")) || prop.PropertyType.Equals(System.Type.GetType("System.DateTime")) || prop.PropertyType.Equals(System.Type.GetType("System.Boolean")))
                                    {
                                        if (!object.Equals(reader[prop.Name], DBNull.Value))
                                        {
                                            prop.SetValue(obj, reader[prop.Name], null);
                                        }
                                    }
                                }
                                t.Add(obj);
                            }
                            con.Close();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw (ex);
            }
            return t;
        }

因此,我将得到两个对象列表,一个用于master,另一个用于parent,然后循环以将子类的对象添加到相关的父类。

从这些物体中我会得到json。

现在,到目前为止,我理解这种方法存在性能问题,好像我有1000条消息和10条URL我最终会有大量的循环。

请您建议直接从Mysql存储过程生成并对此进行排序。

0 个答案:

没有答案