序列化一个c#字符串?

时间:2011-03-07 16:12:34

标签: c# serialization

只是想知道序列化字符串是否等同于获取字节?

System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
            Byte[] responseBytes = encoding.GetBytes(Reader.ReadToEnd());

这是序列化吗?假设Reader.ReadToEnd()返回一个字符串。 如果没有,你如何序列化一个字符串?

4 个答案:

答案 0 :(得分:0)

当然这可以称为序列化,任何将一件事转换成可安全传输(或奇怪)的东西的过程都可以被认为是序列化。重要的是,您可以将这些字节发送到目标,并执行相反的过程(反序列化)。

序列化的另一个例子可能是将对象转换为XML文档。然后将XML文档转换回对象将是反序列化。

答案 1 :(得分:0)

我认为通过序列化可能是基于你意思的主观内容..但是字符串的字节是序列化。

但是如果有一个规范可以遵循“序列化”数据,那么将字符串转换为某个字节编码的特定方法可能是也可能不是预期的。

答案 2 :(得分:0)

序列化只意味着您将对象写入数据存储区,以便以后可以检索它。在这种情况下,看起来您正在序列化,因为您将字符串放在可以传输到存储介质的格式中。

这可能不好做,但维基百科有一个非常好的写作。

http://en.wikipedia.org/wiki/Serialization

答案 3 :(得分:0)

序列化对象意味着以可用于在其他地方重新创建对象的格式写入其字节。

我将对此进行扩展并说序列化对象意味着将其字节写入可由解串器读取的对象,例如,一个BinaryFormatter.Deserialize(),它接受​​一个流。

获取字符串的字节不是一回事,尤其是当您选择任意编码机制时。要使用这些字节来序列化字符串,您必须编写自己的反序列化程序。

你可以说UTF8Encoding对象是一种使用GetBytes()GetString()的序列化程序,但它不是标准的'序列化程序',例如你不能用它来通过WCF服务传递你的字符串。

要反序列化,对象必须具有以下形式的构造函数:

public MyObject(SerializationInfo info, StreamingContext ctx) {...}

以及以下列形式向序列化流添加数据的方法:

public void GetObjectData(SerializationInfo info, StreamingContext ctxt){...}

.NET中的string标记为[Serializable],并且包含以下两个内容......在UTF8Encoding.GetBytes()UTF8Encoding.GetString()

有很多关于如何序列化对象的示例......一种方法是使用BinaryFormatter写入FileStream(您也可以使用MemoryStream):< / p>

string myString = "Whee!";
FileStream fileStream = new FileStream("MyString.txt", FileMode.OpenOrCreate, FileAccess.Write);

try {
    BinaryFormatter formatter = new BinaryFormatter();
    formatter.Serialize(fileStream, myString);
}
finally {
    fileStream.Close();
}

要反序列化:

string myString;
FileStream fileStream = new FileStream("MyString.txt", FileMode.Open, FileAccess.Read);

try {
    BinaryFormatter formatter = new BinaryFormatter();
    myString= (string) formatter.Deserialize(fileStream);
}
finally {
    fileStream.Close();
}

HTH,
詹姆斯