在c#中编写json对象的最佳方法是什么?我有一段代码应该从DB获取数据并写入json对象,但我还没有明白这个
[WebMethod]
public static string get_specialities(string ProfessionalID)
{
Database db = DatabaseFactory.CreateDatabase("Connection String2");
DbCommand dbCommand;
dbCommand = db.GetStoredProcCommand("select_Professionals_Speciality");
db.AddInParameter(dbCommand, "prof_id", DbType.Int16, Convert.ToInt16(ProfessionalID));
IDataReader dr = db.ExecuteReader(dbCommand);
//[{ id: 3, name: "test3" }]
string return_str="[";
int i = 0;
while (dr.Read()) {
if (i > 0)
return_str += ",";
return_str += "{id:" + dr["SpecialtyID"].ToString().Trim() + ",name:" + dr["SpecialtyName"].ToString().Trim() + "}";
i++;
}
return_str += "]";
return return_str;
}
这会返回下面的对象,格式错误
{"d":"[{id:67,name:Kardiyoloji}]"}
我做错了什么?
答案 0 :(得分:2)
List<Person> people = new List<Person>();
Person p = new Person();
while (dr.Read()) {
p = new Person();
p.id = dr["SpecialtyID"].ToString().Trim();
p.name = dr["SpecialtyName"].ToString().Trim();
people.Add(p);
}
JavaScriptSerializer serializer = new JavaScriptSerializer();
string return_str = serializer.Serialize(people);
答案 1 :(得分:0)
关于您提供的代码,正确的json应为:
{"d":[{"id":67,"name":"Kardiyoloji"}]}
您可以查看jsonlint: http://jsonlint.com/
使用序列化程序。 我建议NewtonSoft。 你可以找到很多样本,否则请在这里索取一段代码
答案 2 :(得分:0)
直接转换为字符串通常不是一个好主意...你应该使用诸如作业之类的序列化...但你可以这样尝试
{"d":'[{"id":67,"name":"Kardiyoloji"}]'}
你要再次反序列化d的值吗?
答案 3 :(得分:0)
我假设您不知道如何在您的字符串中编写特殊字符,在您的情况下是"
双重配额?
取代:
"{id:" + dr["SpecialtyID"].ToString().Trim() + ",name:" + dr["SpecialtyName"].ToString().Trim() + "}";
的
"{\"id\":" + dr["SpecialtyID"].ToString().Trim() + "\",\"name\":\"" + dr["SpecialtyName"].ToString().Trim() + "\"}";
将做你需要的。
但更好的方法是使用NewtonSoft
序列化程序进行JSON处理。
希望有所帮助。
答案 4 :(得分:0)
我建议你不要手动构建JSON字符串。
相反,将db数据映射到相应的对象(实体?),然后将其序列化为JSON。
您可以使用Javascript Serializer。我也使用JayRock library。