我正在开发一个Web服务,我需要将用户类型对象作为json响应返回。但我无法使用此代码实现它。
public class BioMatricUsers : System.Web.Services.WebService {
public BioMatricUsers()
{
}
public class my_user
{
public my_user(string i, string b, string l)
{
id = i;
badgeNumber = b;
login = l;
}
public string id { get; set; }
public string badgeNumber { get; set; }
public string login { get; set; }
}
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string GetUsers()
{
OleDbConnection co = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\confiz\Desktop\att2000.mdb");
co.Open();
OleDbCommand cmd = new OleDbCommand("SELECT * FROM USERINFO", co);
OleDbDataReader reader = cmd.ExecuteReader();
string jsonString = "";
int i = 1;
MemoryStream ms = new MemoryStream();
my_user user = null;
Type type = user.GetType();
while (reader.Read() && i <= 2)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(user.GetType());
user = new my_user(reader["USERID"].ToString(), reader["badgenumber"].ToString(), reader["SSN"].ToString());
serializer.WriteObject(ms, user);
jsonString = Encoding.Default.GetString(ms.ToArray());
i++;
}
ms.Close();
co.Close();
return jsonString;
}
}
我在这一行得到空引用错误。 DataContractJsonSerializer serializer = new DataContractJsonSerializer(user.GetType())
答案 0 :(得分:1)
这是因为您的用户 null:
my_user user = null;
尝试:
while (reader.Read() && i <= 2)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(my_user));
user = new my_user(reader["USERID"].ToString(), reader["badgenumber"].ToString(), reader["SSN"].ToString());
serializer.WriteObject(ms, user);
jsonString = Encoding.Default.GetString(ms.ToArray());
i++;
}
Object.getType()
需要非空对象实例才能使用。
typeof(Class)
可以与班级一起使用。
见这里:http://msdn.microsoft.com/en-us/library/58918ffs%28v=vs.71%29.aspx
虽然还有其他库具有其他功能,但如果符合您的需求,则使用DataContractJsonSerializer
是完全可以接受的
答案 1 :(得分:0)
您需要一个库来对json进行序列化/反序列化对象。这是.Net http://james.newtonking.com/projects/json-net.aspx
的好词网页上的示例将解释所有内容。