All*_*enG 2 c# visual-studio-2005 xml-serialization
我有一个这样的课:
[XmlRoot"MyMessageType")]
public class MyMessageType : BaseMessageType
{
[XmlElement("MessageId")]
//Property for MessageId
...
<snip>
//end properties.
}
Run Code Online (Sandbox Code Playgroud)
此类包含一个静态方法,用于创建要传递给BizTalk服务器的XmlDocument实例.像这样:
public static XmlDocument GetMyMessageType(string input1, string input2 ...)
Run Code Online (Sandbox Code Playgroud)
GetMyMessageType 创建一个MyMessageType实例,然后调用以下代码:
XmlSerializer outSer = new XmlSerializer(instance.GetType());
using (MemoryStream mem = new MemoryStream())
using (XmlWriter _xWrite = XmlWriter.Create(mem))
{
outSer.Serialize(_xWrite, instance);
XmlDocument outDoc = new XmlDocument();
outDoc.Load(XmlReader.Create(mem));
return outDoc;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试运行此代码时,我收到XmlException"根元素丢失".当我修改代码输出到测试文件时,我得到一个格式良好的Xml文档.任何人都可以告诉我为什么我能够输出到文件,但不能作为XmlDocument?
你没有倒退MemoryStream,你甚至不知道作家已经冲到了流.我想要更像的东西:
using (MemoryStream mem = new MemoryStream()) {
outSer.Serialize(mem, instance);
mem.Position = 0;
XmlDocument outDoc = new XmlDocument();
outDoc.Load(mem);
return outDoc;
}
Run Code Online (Sandbox Code Playgroud)
实际上,我甚至可能会序列化为一个StringWriter; 保存一些编码/解码开销:
string xml;
using (StringWriter writer = new StringWriter()) {
outSer.Serialize(writer, instance);
xml = writer.ToString();
}
XmlDocument outDoc = new XmlDocument();
outDoc.LoadXml(xml);
return outDoc;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5294 次 |
| 最近记录: |