我将字符串反序列化为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方法更改为我的客户端编写的方法。我只是在编写单元测试来测试它。
答案 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; }
}