我有一个类型为“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软件包,但我遇到了同样的问题。
有什么建议吗?
答案 0 :(得分:5)
如果Newton.Json返回[{},{},{},{},{},{},{},{},{},{},{}],则表示对象已序列化,但它看不到任何要序列化的属性,我猜是因为它们是私有的?
默认情况下,只能序列化公共属性或字段。
@Sinatr评论后编辑: 您还可以将 JsonPropertyAttribute 明确添加到私有字段/属性以对其进行序列化(或使用自定义合约解析程序)。