gpt4 book ai didi

c# - 从 xml 反序列化对象给出错误 : 'Memory stream is not expandable'

转载 作者:行者123 更新时间:2023-11-30 20:08:32 26 4
gpt4 key购买 nike

我重新使用了一些旧代码(我认为是较旧的 .net 版本),用于从 xml 中反序列化对象(最后我将粘贴用于序列化对象的代码)

这是代码:

/// <summary>
/// Reconstruct an object from an XML string
/// </summary>
/// <param name="xml"></param>
/// <returns></returns>
public static T DeserializeObject<T>(string xml)
{
using (MemoryStream stream = new MemoryStream(StringToUTF8ByteArray(xml)))
using (new XmlTextWriter(stream, Encoding.UTF8))
{
return (T)new XmlSerializer(typeof(T)).Deserialize(stream);
}
}

它给我这个错误:'Memory stream is not expandable' at the return line.

出了什么问题?

这是序列化代码:

MemoryStream stream = new MemoryStream();
using (XmlTextWriter xml = new XmlTextWriter(stream, Encoding.UTF8))
{
XmlSerializer xs = new XmlSerializer(item.GetType());
xs.Serialize(xml, item);
stream = (MemoryStream)xml.BaseStream;
}

return UTF8ByteArrayToString(stream.ToArray());

编辑

这是缺少的功能

private static Byte[] StringToUTF8ByteArray(string pXmlString)
{
UTF8Encoding encoding = new UTF8Encoding();
byte[] byteArray = encoding.GetBytes(pXmlString);
return byteArray;
}

最佳答案

首先,您要创建一个 MemoryStream 以从 XML 中读取。然后您将创建 XmlTextWriter写入到该流。为什么?

我怀疑你可以去掉第二个 using 语句:

using (MemoryStream stream = new MemoryStream(StringToUTF8ByteArray(xml)))
{
return (T)new XmlSerializer(typeof(T)).Deserialize(stream);
}

话虽如此,您的StringToUTF8ByteArray 方法的作用还不是很清楚——它只是:

return Encoding.UTF8.GetBytes(text);

?如果是这样,那么这很可能是正确的做法 - 如果原始 XML 采用其他编码,则 XML 声明将说明一件事,而流将包含以另一种编码编码的文本。 .. 不好。你可能会过得更好:

using (TextReader reader = new StringReader(xml))
{
return (T)new XmlSerializer(typeof(T)).Deserialize(XmlReader.Create(reader));
}

关于c# - 从 xml 反序列化对象给出错误 : 'Memory stream is not expandable' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7083708/

26 4 0