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

文字列に直接変換することは、一般的には良い考えではありません...ジョブなどのシリアル化を使用する必要があります...しかし、このように試すことができます

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

d の値を再度デシリアライズしますか?

于 2013-04-04T12:55:17.073 に答える
0

あなたが提供したコードについて、正しいjsonは次のようになります。

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

jsonlint で確認できます: http://jsonlint.com/

シリアライザーを使用します。ニュートンソフトをお勧めします。多くのサンプルを見つけることができます。それ以外の場合は、ここでコードのスニペットを求めてください。

于 2013-04-04T12:54:56.427 に答える