序列化词典<> DataContractJsonSerializer的对象

时间:2012-11-24 20:25:49

标签: c# .net json silverlight serialization

我有以下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运行时。

2 个答案:

答案 0 :(得分:2)

尝试序列化

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

答案 1 :(得分: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查询将使用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}]