private string DeSerialize(string studata)
{
dcs= new DataContractSerializer(typeof(string));
try
{
using (var q = new StringReader(studata))
{
using (XmlReader reader = XmlReader.Create(sr))
{
var k = dcs.ReadObject(reader);
return k.ToString();
}
}
}
catch
{}
return string.Empty;
}
使用上述方法得到运行时错误"错误在第1行位置41.期待元素'字符串'来自命名空间' http://schemas.microsoft.com/2003/10/Serialization/' ..遇到'元素'学生名称空间
答案 0 :(得分:6)
序列化某些内容时,会将对象序列化为某种表示形式,如XML,JSON等。如果表示不是二进制,则序列化的结果可以存储在字符串中。
您的代码正在尝试获取字符串并将其反序列化为字符串。这没有意义。
该行
dcs= new DataContractSerializer(typeof(string));
说明要反序列化的序列化对象的类型是字符串类型。那可能不是你的意思。
将typeof(string)
更改为typeof(WhateverTypeIPreviouslySerialized)
。
此外,DeSerialize
的返回类型为string
。那也应该是WhateverTypeIPreviouslySerialized
。
与核心问题无关,我会指出空捕获
catch
{}
是不好的做法。它将屏蔽被抛出并需要处理的异常。如果要在序列化失败时返回特定值,请将该值放在catch语句中。