1

JSON 形式を返す必要がある API/Web サービスを作成しています。また、Web サービスを POST リクエストのサンプル コードとして作成する必要もあります。この投稿の最後にあるソース コードのスニペットを参照してください。

Meta meta = new Meta(); 
meta.recipes = new List<Recipe>(); 
JavaScriptSerializer js = new JavaScriptSerializer(); 
string strJSON = js.Serialize(meta); 
return strJSON;

問題: いくつかの REST コンソール (試行されたコンソールのリスト) と ASP.NET クライアントで応答を試みると、この形式で、各 "の前に "d" と "\" が追加されます。以下の戻り出力を参照してください。

{"d":"{\"count\":\"0\",\"status\":\"500\",\"recipes\":[]}"}

シリアル化を削除しようとすると、次の形式になります。

<Meta xmlns:xsi="w3.org/2001/XMLSchema-instance"; xmlns:xsd="w3.org/2001/XMLSchema"; xmlns="tempuri.org/">; <count>1</count> <status>200</status> <recipes> <Recipe> <recipeID>1</recipeID> <recipeName>Apple Pie</recipeName> <imageURL>service/it.jpg</imageURL> <rating/> </Recipe> </recipes> </Meta> 

しかし、私は次の形式でそれをしたい:

{"count":"0","status":"500","recipes":[]}

[WebMethod(Description = "Return all Recipe...")] 
[ScriptMethod( ResponseFormat = ResponseFormat.Json)] 
public Meta RecipeList(string ingredientId, string cuisineId, string dishTypeId, string courseId)

メタオブジェクトを返し、シリアライゼーションを追加しなくても、これはまだ XML を返します。

質問:

  1. 正しい JSON 形式は、この「d」と . これは本当ですか、それとも実際に「d」と \ を使用した出力の正しい JSON 形式ですか?
  2. それがなければ、サーバー側またはクライアント側のどこで修正を行うべきだと提案しますか?
  3. サーバー側でこれを修正するにはどうすればよいですか?
  4. これはクライアント側でどのように修正できますか?

    [WebMethod(Description = "Return all Recipe...")]
    [ScriptMethod( ResponseFormat = ResponseFormat.Json)]
    public string RecipeList(string ingredientId, string cuisineId, string dishTypeId, string courseId,
            string occasionId, string considerationId, string recipeType, string readyTime, string favouritebyUserId, string bookmarkbyUserId)
    {
        DataSet ds = new DataSet();
        int rTime = 0;
        if (readyTime == "") rTime = 0;
        else rTime = Convert.ToInt32(readyTime);
        ds = RecipeBLL.SearchRecipe(ingredientId, cuisineId, dishTypeId, courseId, occasionId, considerationId, recipeType, rTime);
        // Create a multidimensional jagged array
        string[][] JaggedArray = new string[ds.Tables[0].Rows.Count][];
        int i = 0;    
    
        Meta meta = new Meta();
    
        int count = 0;
        meta.recipes = new List<Recipe>();
        foreach (DataRow rs in ds.Tables[0].Rows)
        {
            Recipe recipe = new Recipe {
                recipeID = rs["RecipeId"].ToString(),
                recipeName = rs["RecipeTitle"].ToString(),
                 imageURL = rs["Photo"].ToString(),
                rating  = rs["Rating"].ToString()
            };
            meta.recipes.Add(recipe);
            //mlist.Add(recipe);
            count++;
        }
    
        if (count != 0)
            meta.status = "200";
        else
            meta.status = "500";
        meta.count = count.ToString();
        JavaScriptSerializer js = new JavaScriptSerializer();
        string strJSON1 = js.Serialize(meta);
        return strJSON1;
    }
    
4

1 に答える 1

1

問題は、コードから文字列をどこで返していることのようです。その後、他の何かによってJSONとしてエンコードされています。したがって、返される文字列は次のとおりです。

{"count":"0","status":"500","recipes":[]}

...しかし、返されるものはすべて、カウントなどのオブジェクトではなく、文字列を返そうとしていると見なされます。

コードは何も表示されていませんが、答えは1つの明示的なシリアル化呼び出しを削除することだと思います。

于 2012-12-25T12:45:55.230 に答える