Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从嵌套类动态创建DataTable_C#_.net_Datatable - Fatal编程技术网

C# 从嵌套类动态创建DataTable

C# 从嵌套类动态创建DataTable,c#,.net,datatable,C#,.net,Datatable,我试图从一个包含一些嵌套类的类中创建C.NET3.5中的DataTables集合。我基本上是获取一个JSON对象,将其解析为一个RootObject集合,然后最终将其加载到SQL Server db中。我需要一个表,用于下面的每个类expect RootObject,理想情况下,只有value属性在datatable中有一列 下面是我的类的一个片段,我的实际类有5-30个属性: public class RootObject { [JsonProperty("BaseOrderShip

我试图从一个包含一些嵌套类的类中创建C.NET3.5中的DataTables集合。我基本上是获取一个JSON对象,将其解析为一个RootObject集合,然后最终将其加载到SQL Server db中。我需要一个表,用于下面的每个类expect RootObject,理想情况下,只有value属性在datatable中有一列

下面是我的类的一个片段,我的实际类有5-30个属性:

public class RootObject
{

    [JsonProperty("BaseOrderShipment")]
    public BaseOrderShipment BaseOrderShipment { get; set; }

    [JsonProperty("BaseOrder")]
    public BaseOrder BaseOrder { get; set; }

    [JsonProperty("BaseOrderShipmentLineitem")]
    public IList<BaseOrderShipmentLineitem> BaseOrderShipmentLineitem { get; set; }
}

public class BaseOrderShipment
{

    [JsonProperty("shipment_id")]
    public int ShipmentId { get; set; }

    [JsonProperty("order_id")]
    public int OrderId { get; set; }
}

public class BaseOrder
{

    [JsonProperty("order_id")]
    public int OrderId { get; set; }

    [JsonProperty("ShippingAddress")]
    public ShippingAddress ShippingAddress { get; set; }

    [JsonProperty("BillingAddress")]
    public BillingAddress BillingAddress { get; set; }

    [JsonProperty("Lookup")]
    public IList<Lookup> Lookup { get; set; }
}

public class ShippingAddress
{

    [JsonProperty("ship_address_id")]
    public int ShipAddressId { get; set; }

    [JsonProperty("order_id")]
    public int OrderId { get; set; }

}

public class BillingAddress
{

    [JsonProperty("bill_address_id")]
    public int BillAddressId { get; set; }

    [JsonProperty("order_id")]
    public int OrderId { get; set; }
}

public class Lookup
{

    [JsonProperty("lookup_id")]
    public int LookupId { get; set; }

    [JsonProperty("order_id")]
    public int OrderId { get; set; }
}

public class BaseOrderShipmentLineitem
{

    [JsonProperty("line_item_id")]
    public int LineItemId { get; set; }

    [JsonProperty("order_id")]
    public int OrderId { get; set; }

    [JsonProperty("shipment_id")]
    public int ShipmentId { get; set; }
}
我的第一个想法是迭代RootObject类来创建一组空表,然后在我将JSON解析到IList之后填充它们。我的另一个想法是创建DataTable并立即填充它们。我相信这是有争议的,哪一个是更好的方法,所以我对任何一个都持开放态度


类似这样的操作将创建一个datatable,您可以修改LINQ查询以将所需的属性合并到表中

        List<RootObject> retObj = new List<RootObject>();

        IEnumerable<DataRow> query =
            (from order in retObj.AsEnumerable()
             select new
             {
                 //alter these to build the additional datatable columns you require
                 order.BaseOrder.OrderId,
                 order.BaseOrder.BillingAddress.BillAddressId,
                 order.BaseOrder.ShippingAddress.ShipAddressId
             })
            as IEnumerable<DataRow>;
        DataTable dtbBaseOrder = query.CopyToDataTable<DataRow>();

你可能想看一看,然后。我认为这些软件包可以自动完成您需要做的事情。当然,需要进行一些设置。因此,为了澄清您是否希望根对象中的每个对象都有一个数据表?例如,BaseOrderShipping、BaseOrder、BaseOrderShippmentLineItem
        List<RootObject> retObj = new List<RootObject>();

        IEnumerable<DataRow> query =
            (from order in retObj.AsEnumerable()
             select new
             {
                 //alter these to build the additional datatable columns you require
                 order.BaseOrder.OrderId,
                 order.BaseOrder.BillingAddress.BillAddressId,
                 order.BaseOrder.ShippingAddress.ShipAddressId
             })
            as IEnumerable<DataRow>;
        DataTable dtbBaseOrder = query.CopyToDataTable<DataRow>();