【问题标题】:Assign textwriter to memory writer将文本编写器分配给内存编写器
【发布时间】:2012-03-12 08:04:43
【问题描述】:

我正在编写一个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;`

知道如何知道问题发生的原因和位置。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 我没有回答你的问题。刚刚修正了一个拼写错误。
    • 您必须发布更多代码让我们查看问题所在。目前我们甚至看不到 obj 来自哪里,所以我们无法判断错误发生在哪里。
    【解决方案2】:

    尝试通过将 IDisposable 资源包装在 using 语句中来正确处理它们:

    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());
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2010-10-28
      • 2011-07-15
      • 1970-01-01
      • 1970-01-01
      • 2010-11-12
      • 1970-01-01
      • 2013-08-29
      • 2021-10-05
      相关资源
      最近更新 更多