【问题标题】:What is the C# equivalent for PHP serializePHP序列化的C#等价物是什么
【发布时间】:2010-12-22 15:21:36
【问题描述】:

我在 PHp 中有一些代码,我正在尝试在 C# 中重做这些代码。 PHP 代码有类似 fputs($file,serialize($val))

什么是 dot NET 特别是 C# 等价于 Serialize?

【问题讨论】:

  • 记住你的类型和它的所有属性都应该被 Serializable Attrbite 扩充

标签: c# php serialization


【解决方案1】:
using (Stream stream = File.Open(filePath, FileMode.Create))
{
    BinaryFormatter bformatter = new BinaryFormatter();
    bformatter.Serialize(stream, myObject);
}

【讨论】:

  • 我使用了 BinaryFormatter 但格式化输出与 PHP 输出不同。两个函数都格式化为字节流那么为什么输出不同??
  • @xaria:为什么应该是一样的?同一本书的俄语和英语翻译不会产生相同的输出......
  • 我认为 @xaria 希望从 .NET 代码中产生与 PHP serialize() 相同的输出。
【解决方案2】:

与 .NET 中的大多数东西一样,有很多方法可以实现,具体取决于您计划如何使用它。

我能在 .NET BCL 中想到的方式:

  • Zach 指出的 XmlSerializer
  • RedFilter 指出的 BinaryFormatter,
  • WCF 的 DataContract XML/JSON 序列化程序

我通常喜欢 WCF DataContract 序列化器,因为我可以根据需要选择 XML 或 JSON,而且我不需要标记我的类 (.NET 3.5 SP1+) 来进行基本的序列化工作。为此我写了几个助手:http://will.hughesfamily.net.au/20090309/net-35-helper-methods-serialize-objects-to-xml/

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2013-05-10
        • 2011-04-03
        • 2014-05-08
        • 2015-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多