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