将文本编写器分配给内存编写器

时间:2012-03-12 08:04:44

标签: c# asp.net asp.net-mvc c#-4.0 c#-3.0

我正在写一个xml文件但是缺少特定字段的某些值。我检查当对象到来时包含特定值存在的值,但在写xml后该值不存在。

这是我使用的代码,我认为XmlTextWriter可能是错误xml的原因。

可以使用另一种方法,即TextWriter,但无法转换为内存流。

string xmlString = null;
MemoryStream memoryStream = new MemoryStream();
XmlSerializer xs = new XmlSerializer(typeof(T));
// XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.ASCII);
TextWriter xmlTextWriter=new StreamWriter(memoryStream,Encoding.ASCII);
xs.Serialize(xmlTextWriter, obj);
memoryStream =(MemoryStream)xmlTextWriter.    
//(MemoryStream)xmlTextWriter.BaseStream;
xmlString = ASCIIByteArrayToString(memoryStream.ToArray()); 
return `xmlString;`

知道我怎么知道问题发生的原因和地点。

2 个答案:

答案 0 :(得分:6)

我认为你的内存流过于复杂。如果要获取XML字符串,可以序列化为StringWriter(派生自TextWriter),然后调用ToString()。

XmlSerializer xs = new XmlSerializer(typeof(T));
StringWriter sw = new StringWriter();
xs.Serialize(sw, obj);
return sw.ToString();

答案 1 :(得分:0)

尝试通过使用语句包装它们来正确处理您的IDisposable资源:

public string SerializeToXml<T>(T obj)
{
    using (var stream = new MemoryStream())
    {
        var xs = new XmlSerializer(typeof(T));
        xs.Serialize(stream, obj);
        return Encoding.UTF8.GetString(stream.ToArray());
    }
}