从具有父子关系的ado.net生成json

yx2lnoni  于 2021-06-21  发布在  Mysql
关注(0)|答案(0)|浏览(291)

由于我们擅长开发具有连接和使用多个表的存储过程,并且擅长ado.net,所以我们没有选择ef。现在陷入了一个我们正在寻找orm需求,但仍然试图找到简单的解决方案的情况:
我们有一个类消息及其子类,对象列表作为类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;
        }

所以,我将得到两个对象列表,一个是主对象,另一个是父对象,然后循环将子类的对象添加到相关的父类中。
我将从这些对象获得json。
现在,到目前为止,我了解到在这种方法中有一个性能问题,好像我有1000条消息和10条url,我最终会有大量的循环。
你能不能建议一下从mysql存储过程直接生成的方法。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题