簡體   English   中英

使用DataContractJsonSerializer序列化Dictionary <>對象

[英]Serializing a Dictionary<> object with DataContractJsonSerializer

我有以下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}"

我已經嘗試將UseSimpleDictionaryFormat設置為true,但是這個屬性沒有任何效果,也沒有在我能找到的任何地方記錄它的用途。

我不能使用自定義類,因為在編譯時不知道參數鍵/值對。

我也不能使用第三方庫,比如JSon.NET。 我正在使用Silverlight框架和Windows Phone 8運行時。

嘗試序列化這個

var parameters = new
{
    username = "mike",
    password = "secret",
    persist = false
}

添加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查詢將使用Helper類動態地將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}]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM