2

在 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}]"}

我究竟做错了什么?

4

5 回答 5

2

尝试使用JavaScriptSerializer 类

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);
于 2013-04-04T13:08:17.120 回答
0

关于您提供的代码,正确的 json 应该是:

{"d":[{"id":67,"name":"Kardiyoloji"}]}

您可以使用 jsonlint 检查:http: //jsonlint.com/

使用序列化程序。我建议 NewtonSoft。您可以在周围找到很多示例,否则请在此处索取代码片段

于 2013-04-04T12:54:56.427 回答
0

直接转换为字符串通常不是一个好主意...您应该使用诸如作业之类的序列化...但是您可以像这样尝试

{"d":'[{"id":67,"name":"Kardiyoloji"}]'}

你会再次反序列化 d 的值吗?

于 2013-04-04T12:55:17.073 回答
0

我假设您不知道如何在您的字符串中编写特殊字符,这"在您的情况下是双倍配额?

代替: "{id:" + dr["SpecialtyID"].ToString().Trim() + ",name:" + dr["SpecialtyName"].ToString().Trim() + "}";

为了

"{\"id\":" + dr["SpecialtyID"].ToString().Trim() + "\",\"name\":\"" + dr["SpecialtyName"].ToString().Trim() + "\"}";

会做你需要的。但更好的方法是使用NewtonSoft序列化程序进行 JSON 处理。

希望它有所帮助。

于 2013-04-04T13:00:24.653 回答
0

我建议您避免手动构建 JSON 字符串。

而是将 db 数据映射到相应的对象(实体?),然后将其序列化为 JSON。

您可以使用Javascript 序列化器。我也使用JayRock 库

于 2013-04-04T13:00:59.667 回答