无法将字符串反序列化为dictionary

本文关键字:string dictionary 字符串 反序列化 | 更新日期: 2023-09-27 18:19:20

我正在反序列化一个字符串到Dictionary。下面是反序列化的代码:

public T Deserialize<T>(string serialized)
{
    var serializer = new DataContractSerializer(typeof(T));
    StringReader reader = null;
    try
    {
        reader = new StringReader(serialized);
        using (XmlTextReader stm = new XmlTextReader(reader))
        {
            reader = null;
            return (T)serializer.ReadObject(stm);
        }
    }
    finally
    {
        if (reader != null)
        {
            reader.Dispose();
        }
    }
}

这是我传递输入字符串的方式:

string json = @"{""key1"":""value1"",""key2"":""value2""}";

但是我在ReadObject(stm):

这行得到一个错误

反序列化类型的对象出错System.Collections.Generic.Dictionary 2[[系统。字符串,mscorlib,Version = 4.0.0.0、文化=中立,都必须要]、[系统。字符串,mscorlib,版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089]]。根级别的数据无效。第一行,位置1

我试过这样输入:

string json = "[{'key1':'value1','key2':'value2'}]";

但我仍然得到相同的错误。我做错了什么?

Edit:我不能更改Deserialize方法,因为它是由我的客户端编写的方法。我只是在写单元测试来测试它

无法将字符串反序列化为dictionary<string,string>

与其跳过所有这些障碍,使用DataContractSerializer并创建自定义逻辑来解析json,我建议您查看json。. NET,这让它变得很有趣:

string json = @"{""key1"":""value1"",""key2"":""value2""}";
var dictionary = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
编辑:

看起来好像您试图将JSON传递给只能解析XML字符串的方法。我建议您询问您的客户端提供商可以使用哪些可接受的输入。

你可以试试这个-

string json = @"{""key1"":""value1"",""key2"":""value2""}";
var o = new DataContractJsonSerializer(typeof(T));
var mem = new MemoryStream(UTF32Encoding.UTF8.GetBytes(new StreamReader(json.ToCharArray()));
mem.Position = 0;
var o2 = o.ReadObject(mem);
public class T
{
    public string key1 { get; set; }
    public string key2 { get; set; }
}