2015-10-26 76 views
0

我将字符串反序列化为Dictionary。下面是反序列化的代码:无法将字符串反序列化为字典<string,string>

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, Version = 4.0.0.0,Culture = neutral, PublicKeyToken = b77a5c561934e089],[System.String,mscorlib, Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]。 根级别的数据无效。 1号线,位置1

我试图让输入这样的:

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

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

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

+0

看看http://stackoverflow.com/questions/12397733/deserializing-a-list-of-objects-that-c​​ontain-a-dictionary –

+0

什么关于字符串json =“['key1':'value1','key2':'value2']”; ? –

+0

请参阅https://msdn.microsoft.com/en-us/library/system.runtime.serialization.json.datacontractjsonserializer(v=vs.110).aspx.Specially https://msdn.microsoft.com/en- us/library/bb908232(v = vs.110).aspx –

回答

3

而不是通过所有这些箍跳跃和使用DataContractSerializer,并创建自定义的逻辑来解析JSON的,我劝你看看Json.NET,这使它成为一个快乐:

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

编辑:

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

+0

请看看我对 – nitinvertigo

+1

@nitinvertigo所做的修改那么,您可以首先使用XML,否则JSON.NET不支持转换:http://www.newtonsoft.com/json/help/ html/convertingjsonandxml.htm – Casey

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

请参阅我的问题的编辑部分...我无法更改反序列化方法。我只是想知道上述反序列化方法的正确输入格式 – nitinvertigo

相关问题