繁体   English   中英

C#XML序列化问题

[英]C# XML Serialization Problem

我创建了一个接受对象的方法,然后尝试通过首先使用XmlSerializer将对象序列化为Xml来序列化为字符串,然后将Xml重新加载到XmlDocument对象中以使该方法返回。 代码看起来像这样;

 public static XmlDocument ConvertObjectToXMLMessage(object ObjectToConvert)
    {
        MemoryStream stream = null;
        XmlWriter writer = null;
        XmlSerializer serializer = null;
        XmlDocument xmlDoc = new XmlDocument();
        UnicodeEncoding utf = new UnicodeEncoding();
        UTF8Encoding utf8 = new UTF8Encoding();
        ASCIIEncoding ascii = new ASCIIEncoding();
        string result = string.Empty;

        try
        {
            stream = new MemoryStream();
            //writer = new StreamWriter(stream, Encoding.Unicode);
            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Encoding = Encoding.UTF8;
            writer = XmlWriter.Create(stream, settings);                

            serializer = new XmlSerializer(ObjectToConvert.GetType());
            serializer.Serialize(writer, ObjectToConvert);

            int count = Convert.ToInt32(stream.Length);
            Byte[] arr = new Byte[count];

            stream.Seek(0, SeekOrigin.Begin);

            stream.Read(arr, 0, count);

            result = utf8.GetString(arr).Trim();

            // if this is being used during a debug session, the xml will be written to the Debug Console
#if DEBUG
            //blank line before
            Debug.WriteLine(string.Empty);
            // output result
            Debug.Write(result);
            //blank line after
            Debug.WriteLine(string.Empty);
#endif

            xmlDoc.LoadXml(result);

            return xmlDoc;
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            if (writer != null)
                writer.Close();
        }
    }

一切正常,直到xmlDoc.LoadXml(result)命令。 这引发了异常; {“根级别的数据无效。第1行,位置1。”}

如您所见,我已经声明了许多编码变量。 如果我使用ASCII编码,则可以使用。 我需要使用UTF8。

任何想法为什么这不起作用? 我认为这是因为在Xml forter序列化开始时插入了虚假字符。 如何避免这种情况? 我可以序列化的类的类型是实体框架对象或从XSD或WSDL生成的代理类。

如果直接加载流而不进行手动读取或转换,该怎么办?

XmlDocument xd = new XmlDocument();
xd.Load( stream );

这至少将减少可能发生错误的位置的数量。

代码似乎还不错。。。尝试通过代码访问文件之前,是否要与编辑器打开?

我遇到了在文件中添加一些内容的编辑器的问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM