[英]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.