Xml序列化C#我反序列化时出错 [英] Xml serialization C# I get error when I deserialize

查看:140
本文介绍了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 two xmlData lines. You're not using the variable, so there's no need for it.

Secondly, after writing the data to the MemoryStream, 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆