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

Ali*_*aly 0 c# arrays json

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

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

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

这是完整的beind-code:

using System.Web.Script.Serialization;
using System.Web.Script.Services;
using Newtonsoft.Json;
Run Code Online (Sandbox Code Playgroud)

..

[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;
}
Run Code Online (Sandbox Code Playgroud)

这是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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

我也试过用这个:

var string jsonOb = JsonConvert.SerializeObject(dataRows);
Run Code Online (Sandbox Code Playgroud)

但是当弹出错误时:

<'object'不包含'SerializeObject'的定义,并且没有扩展方法'SerializeObject'接受类型'object'的第一个参数(你是否缺少using指令或汇编引用?)>

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

有什么建议吗?

Oua*_*rzy 5

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

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

@Sinatr注释后编辑: 您还可以将JsonPropertyAttribute显式添加到私有字段/属性以对其进行序列化(或使用自定义合同解析程序).