![](/img/trans.png)
[英]Serialize a Dictionary as JSON object using DataContractJsonSerializer
[英]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.