尝试将List <object>转换为数组

时间:2016-08-30 07:19:29

标签: c# arrays json

我有一个类型为“Employee”类对象的列表,其中包含从数据库中检索的员工详细信息。

所有数据都被成功检索到列表,但是当我尝试将列表转换为JSON数组对象时,我遇到了奇怪的错误。

我使用了两种方法来完成它,但它们都没有用。

这是完整的beind-code:

using System.Web.Script.Serialization;
using System.Web.Script.Services;
using Newtonsoft.Json;

...

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string getRecords()
{
    SqlConnection con;
    SqlCommand cmd;
    SqlDataReader reader;
    List<Employee> dataRows = new List<Employee>();

    con = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=\"C:\\Users\\Shebel Ali\\Desktop\\SampleDB.mdf\";Integrated Security=True;Connect Timeout=30");
    con.Open();
    cmd = con.CreateCommand();
    cmd.CommandText = "select * from Employee";

    reader = cmd.ExecuteReader();
    int i = 1;

    for (i=0; i<reader.FieldCount; i++)
    {
        Debug.WriteLine(reader.GetName(i));
    }


    while (reader.Read())
    {
        Employee getEmp = new Employee(reader.GetValue(0).ToString(), reader.GetValue(1).ToString(), reader.GetValue(2).ToString(), reader.GetValue(3).ToString(), reader.GetValue(4).ToString(), reader.GetValue(5).ToString(), reader.GetValue(6).ToString());
        dataRows.Add(getEmp);
    }

    JavaScriptSerializer js = new JavaScriptSerializer();        
    string resp = js.Serialize(dataRows);

    return resp;
}

这是Employee类:

[Serializable]
public class Employee: ISerializable
{
    private string empID { get; set; }
    private string fname { get; set; }
    private string lname { get; set; }
    private string address { get; set; }
    private string phone { get; set; }
    private string deptID { get; set; }
    private string email { get; set; }

    public Employee(string empID, string fname, string lname,string address, string phone, string deptID, string email)
    {
        this.empID = empID;
        this.fname = fname;
        this.lname = lname;
        this.phone = phone;
        this.deptID = deptID;
        this.email = email;
        this.address = address;
    }
}

这段代码给我一个空的JSON数组对象:

  

[{},{},{},{},{},{},{},{},{},{},{}]

我也尝试过使用它:

var string jsonOb = JsonConvert.SerializeObject(dataRows);

但是当弹出错误时:

  

&lt;'object'不包含'SerializeObject'的定义,也没有   扩展方法'SerializeObject'接受类型的第一个参数   可以找到'对象'(你是否错过了使用指令或者   装配参考?)&gt;

我曾多次尝试重新安装Newtonsoft软件包,但我遇到了同样的问题。

有什么建议吗?

1 个答案:

答案 0 :(得分:5)

如果Newton.Json返回[{},{},{},{},{},{},{},{},{},{},{}],则表示对象已序列化,但它看不到任何要序列化的属性,我猜是因为它们是私有的?

默认情况下,只能序列化公共属性或字段。

@Sinatr评论后编辑: 您还可以将 JsonPropertyAttribute 明确添加到私有字段/属性以对其进行序列化(或使用自定义合约解析程序)。