对象序列化和 IDisposable
public static string SerializeObject<T>(T obj)
{
try
{
string xmlString = null;
MemoryStream memoryStream = new MemoryStream();
XmlSerializer xs = new XmlSerializer(typeof(T));
XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
xs.Serialize(xmlTextWriter, obj);
memoryStream = (MemoryStream)xmlTextWriter.BaseStream;
xmlString = UTF8ByteArrayToString(memoryStream.ToArray()); return xmlString;
}
catch
{
return string.Empty;
}
}
这是来自 - 链接
有没有办法在不需要重新分配内存流对象的情况下编写此内容? 难道不应该将其丢弃(包装在 using 块中)吗?使用后重新分配的内存流是什么?
public static string SerializeObject<T>(T obj)
{
try
{
string xmlString = null;
MemoryStream memoryStream = new MemoryStream();
XmlSerializer xs = new XmlSerializer(typeof(T));
XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
xs.Serialize(xmlTextWriter, obj);
memoryStream = (MemoryStream)xmlTextWriter.BaseStream;
xmlString = UTF8ByteArrayToString(memoryStream.ToArray()); return xmlString;
}
catch
{
return string.Empty;
}
}
this is from - Link
Is there a way to write this where the memoryStream object doesn't need to be reassigned?
Shouldn't it be disposed (wrapped in a using block)? What is the memoryStream used then reassigned?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
我也不理解内存流重新分配。这是我的重构版本。
I am not understanding the memory stream reassignment either. Here is my refactored version.
你是对的。您应该将流包装在 using 块中。并且在using块中使用变量时不允许重新赋值。甚至不需要进行序列化。你可以这样做:
You are correct. You should wrapped the stream in a using block. And the reassignment is not allowed when the variable is used in the using block. And its not even needed to do the serializing. You could do it like this:
我会以与其他答案略有不同的方式重构此代码,以首先检查类型是否可序列化。无法通过使用约束来做到这一点(http://bit.ly/c2Hq4s),但您可以无论如何,检查起来很容易。我只是省略了 using 并包含了 Final,只是为了表明您也可以在不使用 using 的情况下完成此操作。
I would refactor this code slightly differently to other answers to first check if the type is serializable. There's is no way to do this by using constraints (http://bit.ly/c2Hq4s) but you can check it easily enough anyway. I just left out the using and included the Finally just to show that you could do it without the using also.
如果您想使用当前的编码,这里是同一件事的另一个示例。
In case you want to use the current encoding, here is another example of the same thing.