12

System.Web.Helpers の Json クラスを使用して次のコードを実行すると、元の文字列と同じ情報を含む json 文字列が生成されると予想していましたが、奇妙なことに、文字列のみを返し、{ "employees" : {} }配列を完全に省略して置き換えます空のオブジェクトで?

string jsonData = "{ \"employees\": [ { \"firstName\":\"John\" , \"lastName\":\"Doe\" }, { \"firstName\":\"Anna\" , \"lastName\":\"Smith\" }, { \"firstName\":\"Peter\" , \"lastName\":\"Jones\" } ] }";
var json = Json.Decode(jsonData);
string result = Json.Encode(json); 
// result is: { "employees" : {} }

Json.Decode から返されたオブジェクトを見ると、配列は DynamicJsonArray にデコードされています。配列/リスト/辞書を使用して .NET オブジェクトを作成すると、それらは完全にエンコードされているように見えるため、問題は DynamicJsonArray に関連しているようです。

配列なしで複雑な json 文字列をエンコード/デコードすると、正常に動作しているようです。

string jsonData = "{ \"firstName\": \"John\", \"lastName\": \"Doe\", \"family\": { \"mother\": { \"firstName\": \"Anna\", \"lastName\": \"Smith\" }, \"father\": { \"firstName\": \"Peter\", \"lastName\": \"Jones\" }  }  }";
var json = Json.Decode(jsonData);
string result = Json.Encode(json); 
/* result is (formatted for readability):
{
    "firstName" : "John",
    "lastName" : "Doe",
    "family" : {
        "mother" : {
            "firstName" : "Anna",
            "lastName":"Smith"
         },
         "father" : {
             "firstName" : "Peter",
             "lastName" : "Jones"
          }
     }
}
*/

msdn のドキュメントを見てきましたが、これが機能しない理由が見つかりませんでした。それはバグでしょうか、それとも設計によるものでしょうか?

アップデート

ルートノードに配列であるjson文字列がある場合、正しくエンコード/デコードされるため、これがバグであると本当に疑うようになります(または少なくとも非常に一貫性がありません)。

string jsonData = "[ { \"firstName\":\"John\" , \"lastName\":\"Doe\" }, { \"firstName\":\"Anna\" , \"lastName\":\"Smith\" }, { \"firstName\":\"Peter\" , \"lastName\":\"Jones\" } ]";
var json = Json.Decode(jsonData);
string result = Json.Encode(json);
/* result is (formatted for readability):
[
    { 
        "firstName" : "John",
        "lastName" : "Doe"
    },
    {
        "firstName" : "Anna",
        "lastName" : "Smith" 
    },
    {
        "firstName" : "Peter",
        "lastName" : "Jones"
    }
]
*/

更新 2

結局、Microsoft に問題を開くことにしました。彼らの意見を見てみましょう: http://connect.microsoft.com/VisualStudio/feedback/details/779119/data-from-json-decode-is-not-encoded-correctly-when-encoding-with-json-エンコード

4

3 に答える 3

0

代わりにJson.NETを使用する必要があると思います。参照:Codeplex上のJson.NET

于 2013-02-14T16:22:26.827 に答える