C#中与PHP序列化相对应的是什么?

5

我有一些PHP代码,现在想用C#重写。PHP代码中有像fputs($file,serialize($val))这样的内容。

在.NET中,具体而言是C#,什么可以替代Serialize?


请记住,您的类型及其所有属性都应该通过Serializable属性进行增强。 - Jahan Zinedine
4个回答

4
using (Stream stream = File.Open(filePath, FileMode.Create))
{
    BinaryFormatter bformatter = new BinaryFormatter();
    bformatter.Serialize(stream, myObject);
}

我使用了BinaryFormatter,但格式化的输出与PHP输出不同。两个函数都将格式化为字节流,那么为什么输出不同? - xaria
@xaria:为什么要一样呢?同一本书的俄语和英语翻译并不会产生相同的输出... - D'Arcy Rittich
2
我认为@xaria想要从.NET代码中生成与PHP serialize()相同的输出。 - saille

3
与大多数.NET技术一样,根据您的使用情况,有很多种方法可以实现它。
我能想到的.NET BCL中的几种方式包括:
- Zach提出的XmlSerializer - RedFilter提出的BinaryFormatter - WCF的DataContract XML/JSON Serializer 通常我喜欢使用WCF DataContract Serializer,因为我可以根据需要选择XML或JSON,并且不需要标记我的类(.NET 3.5 SP1+),就可以使基本序列化工作。我为此编写了一些帮助程序:http://will.hughesfamily.net.au/20090309/net-35-helper-methods-serialize-objects-to-xml/

1

Sharp Serialization Library对我在将serialize调用从vBulletin移植到C#时很有帮助。但是在serialize方法中,我不得不使用str.Length替换StringEncoding.GetByteCount(str),因为StringEncoding.GetByteCount会给出长度+1,这会在使用PHP进行反序列化时导致问题。所以整行代码应该是:

return sb.Append("s:" + str.Length + ":\"" + str + "\";");

0

.NET 提供二进制或 XML/SOAP 序列化。请参见 MSDN


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接