2012-10-01 223 views
0

我正在开发一个Web服务,其中我需要返回用户类型对象作为JSON响应。但我无法使用此代码实现它。Asp.net返回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())

回答

1

这是因为你的用户空:

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如果满足您的需求

0

您需要一个将对象序列化为/从json中去除的库。这是一个很好的.Net http://james.newtonking.com/projects/json-net.aspx

网页上的示例将解释一切。

+0

是。我同意。这个JSON.net库非常棒! –

+0

但这不是必需的,它不会解决user1673005的空引用错误。 – JcFx