C# 序列化词典<&燃气轮机;对象与DataContractJsonSerializer
我有以下C# 序列化词典<&燃气轮机;对象与DataContractJsonSerializer,c#,.net,json,silverlight,serialization,C#,.net,Json,Silverlight,Serialization,我有以下字典对象: Dictionary<String, object> parameters = new Dictionary<string, object>(); parameters.Add("username", "mike"); parameters.Add("password", "secret"); parameters.Add("persist", false); 我得到以下信息: "[{\"Key\":\"username\",\"Value\":\"
字典
对象:
Dictionary<String, object> parameters = new Dictionary<string, object>();
parameters.Add("username", "mike");
parameters.Add("password", "secret");
parameters.Add("persist", false);
我得到以下信息:
"[{\"Key\":\"username\",\"Value\":\"mike\"},{\"Key\":\"password\",\"Value\":\"secret\"},{\"Key\":\"persist\",\"Value\":false}]"
我想要得到的是一个原始的键/值对映射,如下所示:
"{\"username\":\"mike\", \"password\":\"secret\", \"persist\": false}"
我已尝试将usesimpleditionaryformat
设置为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));
}
}
结果:
[{\"username\":\"mike\"},{\"password\":\"secret\"},{\"persist\":false}]
DataContractJsonSerializer基本上已损坏。这种方法听起来很明智;如果可能的话(我不知道win8),使用JavascriptSerializer,它唯一的优点是能够序列化字典JavaScriptSerializer@faester-不幸的是,
JavaScriptSerializer
在Silverlight框架中不可用。@karaxuna-这是一种不错的方法,但是,我的类当前有一个添加参数的AddParameter(string,object)
方法。我可以将方法更改为一次获取所有参数,但是我不相信您可以将匿名类型传递到方法中。实际上,我只为所有类型的参数编写代理对象,尽管这需要更多的代码,然而,如果我真的想让它发挥作用,我认为这种方法可能是最好的方法。谢谢Mikestring json=JsonConvert.SerializeObject(参数)
做的正是您想要的,因此它支持Silverlight、windows phone和winRT。正如我所说的,我不能使用第三方库。
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}]