4

次のDictionary<>オブジェクトがあります。

Dictionary<String, object> parameters = new Dictionary<string, object>();
parameters.Add("username", "mike");
parameters.Add("password", "secret");
parameters.Add("persist", false);

シリアライズすると:

using (MemoryStream stream = new MemoryStream())
{
   DataContractJsonSerializer serializer = new DataContractJsonSerializer(parameters.GetType());
   serializer.WriteObject(stream, parameters);

   byte[] bytes = stream.ToArray();
   string json = Encoding.UTF8.GetString(bytes, 0, bytes.Length);

   return json;
}

私は以下を取得します:

"[{\"Key\":\"username\",\"Value\":\"mike\"},{\"Key\":\"password\",\"Value\":\"secret\"},{\"Key\":\"persist\",\"Value\":false}]"

私が取得したいのは、次のような生のキー/値ペア マップです。

"{\"username\":\"mike\", \"password\":\"secret\", \"persist\": false}"

true に設定しようとしましUseSimpleDictionaryFormatたが、このプロパティは効果がなく、その使用目的はどこにも記載されていません。

パラメータのキーと値のペアがコンパイル時に不明なため、カスタム クラスを使用できません。

また、JSON.NET などのサードパーティ ライブラリも使用できません。Silverlight フレームワークと Windows Phone 8 ランタイムを使用しています。

4

2 に答える 2

2

System.Json を参照として追加した後、このヘルパー クラスを使用して JSON プロパティを構築します。

public static class JsonHelper
{
    public static KeyValuePair<string, JsonValue> CreateProperty(string name, dynamic value)
    {
        return new KeyValuePair<string, JsonValue>(name, new JsonPrimitive(value));
    }
}

次の LINQ クエリは、ヘルパー クラスを使用して JSON プロパティを JsonArray として動的に返します。

var result = from item in parameters
             select new JsonObject(JsonHelper.CreateProperty(item.Key, item.Value));

string json = (new JsonArray(result)).ToString();

結果:

[{\"username\":\"mike\"},{\"password\":\"secret\"},{\"persist\":false}]
于 2012-11-25T03:42:02.797 に答える
2

これをシリアライズしてみる

var parameters = new
{
    username = "mike",
    password = "secret",
    persist = false
}
于 2012-11-24T20:29:13.350 に答える