列表中没有添加c#中的所有值

本文关键字:添加 列表 | 更新日期: 2023-09-27 17:49:28

我尝试下面的代码创建json代码,代码工作良好。

我从数据库中加载值,但最后一个值只有我得到一个输出,剩下的值没有添加…

DataTable dt = new DataTable();
var objectToSerialize = new RootObject();
SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["dbconnection"].ToString());
SqlCommand command = new SqlCommand("select * from IFlicksMenu", connection);
SqlDataAdapter da = new SqlDataAdapter(command);
da.Fill(dt);
foreach (DataRow dr in dt.Rows)
{
    foreach (DataColumn col in dt.Columns)
    { 
        objectToSerialize.contacts = new List<Cont> 
        {
            new Cont
            { 
                sno = dr["Cinema"].ToString(), 
                name = dr["Gallery"].ToString(), 
                address =  dr["star"].ToString(), 
                gender =  dr["video"].ToString(), 
                em = dr["em"].ToString(),
                phone=new Phone { mobile=dr["phonone"].ToString() } 
            },
        };          
    }
    JavaScriptSerializer serializer = new JavaScriptSerializer();
    Response.Write(serializer.Serialize(new { item = objectToSerialize.contacts }));
}

输出
{
    "item":[
         {
        "phone":{
            "mobile":"99528748474"
                },
        "sno":"ACTRESS",
        "name":"ACTRESS",
        "em":"scd",
        "address":"ACTRESS",
        "gender":"TRAILER"
        }
    ]
}

列表中没有添加c#中的所有值

每次迭代都在foreach中实例化list,因此它需要最后的迭代。你可以在foreach外定义List对象,在foreach内定义值

List<Cont> ContCollection =  new List<Cont>();
foreach (DataRow dr in dt.Rows)
{
    foreach (DataColumn col in dt.Columns)
    { 
        ContCollection.Add(new Cont(){
                            sno = dr["Cinema"].ToString(), 
                            name = dr["Gallery"].ToString(), 
                            address =  dr["star"].ToString(), 
                            gender =  dr["video"].ToString(), 
                            em = dr["em"].ToString(),
                            phone=new Phone { mobile=dr["phonone"].ToString() }
                           });

    }
    objectToSerialize.contacts = ContCollection;
    JavaScriptSerializer serializer = new JavaScriptSerializer();
    Response.Write(serializer.Serialize(new { item = objectToSerialize.contacts }));
}

当您想在循环开始时创建in并不断添加到列表中时,您可以为每个项目重新创建contacts:

var items = new List<Cont>();
foreach (DataRow dr in dt.Rows)
{ 
    items.Add(new Cont{ 
        sno = dr["Cinema"].ToString(), 
        name = dr["Gallery"].ToString(), 
        address =  dr["star"].ToString(), 
        gender =  dr["video"].ToString(), 
        em = dr["em"].ToString(),
        phone = new Phone{ mobile=dr["phonone"].ToString() }
    });
}
objectToSerialize.contacts = items;

你还需要删除内部循环

foreach (DataColumn col in dt.Columns)

,因为它将有效地将行数乘以列数

尝试使用

objectToSerialize.contacts.Add( new List<Cont> 
{
    new Cont{ sno = dr["Cinema"].ToString(), name = dr["Gallery"].ToString(), address =  dr["star"].ToString(), gender =  dr["video"].ToString(), em = dr["em"].ToString(),phone=new Phone{mobile=dr["phonone"].ToString()} },
});       
不是

objectToSerialize.contacts = new List<Cont> 
{
    new Cont{ sno = dr["Cinema"].ToString(), name = dr["Gallery"].ToString(), address =  dr["star"].ToString(), gender =  dr["video"].ToString(), em = dr["em"].ToString(),phone=new Phone{mobile=dr["phonone"].ToString()} },
};