我正在尝试将List转换为Dataset(DataTables集)。但是当我尝试这个时,我只得到了一张桌子。但根据我的模型它必须是5个表。任何人都可以告诉我这个。
我的矩阵模型
public class MatrixModel
{
public class RootObject
{
public string responseId { get; set; }
public string searchId { get; set; }
public int totalFound { get; set; }
public List<availableHotels> availableHotels { get; set; }
}
public class availableHotels
{
public string processId { get; set; }
public string hotelCode { get; set; }
public string availabilityStatus { get; set; }
public double totalPrice { get; set; }
public double totalTax { get; set; }
public double totalSalePrice { get; set; }
public string currency { get; set; }
public string boardType { get; set; }
public List<rooms> rooms { get; set; }
}
public class rooms
{
public string roomCategory { get; set; }
public List<paxes> paxes { get; set; }
public double totalRoomRate { get; set; }
public List<ratesPerNight> ratesPerNight { get; set; }
}
public class paxes
{
public string paxType { get; set; }
public int age { get; set; }
}
public class ratesPerNight
{
public string date { get; set; }
public double amount { get; set; }
}
}
List<MatrixModel.RootObject> ddd = JsonConvert.DeserializeObject<List<MatrixModel.RootObject>>("["+tstobj+"]");
将列表转换为数据集
DataSet dvv=ddd.ToDataSet<MatrixModel.RootObject>();
public static class ListConverter
{
/// <summary>
/// Convert our IList to a DataTable
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="list"></param>
/// <returns>DataTable</returns>
public static DataTable ToDataTable<T>(this IEnumerable<T> list)
{
Type elementType = typeof(T);
using (DataTable t = new DataTable())
{
PropertyInfo[] _props = elementType.GetProperties();
foreach (PropertyInfo propInfo in _props)
{
Type _pi = propInfo.PropertyType;
Type ColType = Nullable.GetUnderlyingType(_pi) ?? _pi;
t.Columns.Add(propInfo.Name, ColType);
}
foreach (T item in list)
{
DataRow row = t.NewRow();
foreach (PropertyInfo propInfo in _props)
{
row[propInfo.Name] = propInfo.GetValue(item, null) ?? DBNull.Value;
}
t.Rows.Add(row);
}
return t;
}
}
/// <summary>
/// Convert our IList to a DataSet
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="list"></param>
/// <returns>DataSet</returns>
public static DataSet ToDataSet<T>(this IEnumerable<T> list)
{
using (DataSet ds = new DataSet())
{
ds.Tables.Add(list.ToDataTable());
return ds;
}
}
}
我只有一个DataTable。
答案 0 :(得分:1)
主要问题是您希望将分层数据转换为关系数据,并且无法轻松完成此操作。例如,在您当前的分层模型中,每List
存储availableHotels
RootObject
,但在关系数据库(如DataSet
)中,您应存储所有availableHotels
RootObjectId
然后在单独的表中添加一个RootObject
列到该表中,并为每一行设置availableHotels
对象的id,该对象是存储在using
中的return
的父对象。这一行。等等其他数据。
这需要一种与您在代码中使用的方法完全不同的方法。
当然,如果您想要{{1}}并且在方法之外使用它们,那么您不应该将{{1}}放在新创建的对象上,因为它会处理它们。