Xml序列化C#我反序列化时出错 [英] Xml serialization C# I get error when I deserialize
本文介绍了Xml序列化C#我反序列化时出错的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
您好这些是我在c#中的序列化和反序列化方法。当我反序列化一个对象或什么时,我得到错误。
Hello these are my serialization and deserialization methods in c#. When I deserialize an object or something I get Error.
public byte[] Serialize<T>(T ob)
{
System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(ob.GetType());
MemoryStream ms = new MemoryStream();
xs.Serialize(ms, ob);
string xmlData = System.Text.Encoding.ASCII.GetString(ms.ToArray(), 0, ms.ToArray().Length);
return ms.ToArray();
}
public T XMLDeSerialize<T>(byte[] data)
{
string xmlData = System.Text.Encoding.ASCII.GetString(data,0,data.Length);
System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(T));
MemoryStream ms = new MemoryStream();
ms.Write(data, 0, data.Length);
ms.Position = 0;
XmlReader rdr = XmlReader.Create(ms);
ms.Position = 0;
T t = (T)xs.Deserialize(rdr);
return t;
}
我的尝试:
我尝试了上面的方法,无法设法工作。我无法找到任何解决方案。
What I have tried:
I tried the methods above and could not managed to work. I cant find any solution.
推荐答案
首先,摆脱两个xmlData
行。你没有使用变量,所以不需要它。
其次,将数据写入MemoryStream
,您需要将当前位置移回流的开头:
Firstly, get rid of the twoxmlData
lines. You're not using the variable, so there's no need for it.
Secondly, after writing the data to theMemoryStream
, you need to move the "current position" back to the start of the stream:
ms.Write(data, 0, data.Length);
ms.Seek(0L, SeekOrigin.Begin);
随着这种变化的到位,你的方法完美无缺:
With that change in place, your methods work perfectly:
public byte[] Serialize<T>(T ob)
{
var xs = new System.Xml.Serialization.XmlSerializer(ob.GetType());
var ms = new MemoryStream();
xs.Serialize(ms, ob);
// string xmlData = System.Text.Encoding.ASCII.GetString(ms.ToArray(), 0, ms.ToArray().Length);
return ms.ToArray();
}
public T DeSerialize<T>(byte[] data)
{
// string xmlData = System.Text.Encoding.ASCII.GetString(data,0,data.Length);
var xs = new System.Xml.Serialization.XmlSerializer(typeof(T));
var ms = new MemoryStream();
ms.Write(data,0,data.Length);
ms.Seek(0L, SeekOrigin.Begin); // <-- Add this line
T t = (T)xs.Deserialize(ms);
return t;
}
我找到了解决方案。
我刚刚删除
I found the solution.
I just removed
ms.Position = 0
在
T t = (T)xs.Deserialize(rdr);
workedt就像一个魅力。
İt worked like a charm.
这篇关于Xml序列化C#我反序列化时出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文