如何:从javascript反序列化C#对象

How to : Deserialize a C# object from javascript

本文关键字:对象 反序列化 javascript 如何      更新时间:2023-09-26

我在网上搜索了一下,找不到问题的答案。

我有一个由 MemoryStream 的对象创建的 C# 序列化。我想保存该序列化(这是我已经可以做的事情),然后用 JavaScript 反序列化它。

有谁知道这是否可能?我还没有看到任何可以做到这一点的 API。

谢谢你的回答。更具体地说,我已经有一个在 C# 中运行的应用程序,它使用 MemoryStream 的反序列化。这是一个相当大的应用程序,我想做尽可能少的修改。我想使用相同的序列化将另一个应用程序(在 HTML/JavaScript 中运行)与第一个应用程序链接。如果我使用 JSON 序列化,我将不得不经常修改 C# 中的代码,这是我想尽量避免的事情。

总而言之,我希望能够在我的 JavaScript 项目中"读取"由 C# 生成的序列化。

为了清楚起见,我不想使用其他序列化为JSON/XML/...,我想使用我已经使用的序列化,然后用JavaScript反序列化它。

提前谢谢。

在 C# 中使用序列化时,通常具有二进制或 XML 序列化。这些都不能被 JavaScript 开箱即用地读取。(而且尝试实现这一点确实不值得努力)。

但是从对象序列化切换到JSON(反之亦然)并不难:

Person p = new Person();
p.name = "John";
p.age = 42;
MemoryStream stream1 = new MemoryStream();
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Person));
ser.WriteObject(stream1, p);

(来自 MSDN 的示例:https://msdn.microsoft.com/en-us/library/bb412179%28v=vs.110%29.aspx)

所以。简而言之:重新考虑您的要求。没有 Json 您将找不到简单的解决方案

您可以尝试 XML 序列化或 JSON。C# 有一个易于使用的 XML 提供程序类,但您应该将数据解析为对象 Array,以便 Java 和 C# 可以按如下方式反序列化它们:

public class person
{
  public string name;
  public byte age;
  public person(object[] args)
  {
     name = args[0];
     age = args[1];
  }
}

在 Recieve 上,您可以在 objec[] 中反序列化,然后使用

Person p = new Person(rec_args);

我不完全知道 Javascript 如何处理类,但在 Serilaziation 级别,您必须在基本级别(仅将变量序列化为对象数组和反向)才能获得干净的无错误执行!