Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 序列化词典<&燃气轮机;对象与DataContractJsonSerializer_C#_.net_Json_Silverlight_Serialization - Fatal编程技术网

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)
方法。我可以将方法更改为一次获取所有参数,但是我不相信您可以将匿名类型传递到方法中。实际上,我只为所有类型的参数编写代理对象,尽管这需要更多的代码,然而,如果我真的想让它发挥作用,我认为这种方法可能是最好的方法。谢谢Mike
string 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}]