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

时间:2015-10-26 13:36:11

标签: c# dictionary serialization deserialization

我将字符串反序列化为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 [[System.String,mscorlib,   版本= 4.0.0.0,文化=中立,   PublicKeyToken = b77a5c561934e089],[System.String,mscorlib,   Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]。   根级别的数据无效。第1行,第1位。

我尝试过输入这样的输入:

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

但我仍然遇到同样的错误。我做错了什么?

编辑:我无法将Deserialize方法更改为我的客户端编写的方法。我只是在编写单元测试来测试它。

2 个答案:

答案 0 :(得分:3)

我没有跳过所有这些箍并使用DataContractSerializer并创建自定义逻辑来解析json,而是建议你研究一下Json.NET,这让我很高兴:

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

修改

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

答案 1 :(得分:0)

你可以试试这个 -

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; }
}