如何在C#中反序列化PHP序列化数组

5

我有一个通过PHP (WordPress) 序列化的字符串数组,类似于以下内容:

a:2:{i:0;s:12:"Sample array";i:1;a:2:{i:0;s:5:"Apple";i:1;s:6:"Orange";}}

我该如何在C#中对这个字符串进行反序列化?

如果我将该字符串复制到https://www.unserialize.com,它可以成功转换结构。

谢谢!


我建议您从C#调用一个PHP脚本,该脚本运行unserialize然后json_encode。然后您可以在C#中解码它。 - AbraCadaver
1
如果您想要实现它,您也可以在这里查看 https://github.com/php/php-src/blob/4a816584a4d483722485e5163396ea1bb2a6aee7/ext/standard/var.c - AbraCadaver
1
PHP是一种动态类型语言,而C#则不是。如果您想让这两种语言进行通信,最好的方法是使用实际的JSON(或其他常见格式),以便两者都可以正确地进行序列化和反序列化。否则,您将不得不根据所需创建的类型(例如IEnumerable或其他类型)自己编写反序列化器。 - Nikki9696
1
你甚至可以将这个反序列化/JSON编码器托管在Web服务器上,只需发布序列化字符串并获取JSON返回。 - AbraCadaver
PHP 的 serialize() 函数不应该曝露给用户空间。如果有机会,你永远不应该依赖它,而且在任何情况下都不应该反序列化用户提交的值。如果你真的想做这件坏事,那么格式通常是 {type}:{size}:{value},分隔符为;。数组条目是键值对。不可打印/特殊字符没有被转义或特别处理,甚至成为格式的一部分。祈祷你永远不要遇到序列化的对象。祝好运。 - Sammitch
1个回答

2
你可以使用KaitaiStruct库。
示例(source):
// Parse a local file and get structure in memory
var data = PhpSerializedValue.FromFile("path/to/local/file.php_serialized_value");

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