【问题标题】:Decode JSON Object in C# without prior knowledge of type [duplicate]在没有类型知识的情况下用 C# 解码 JSON 对象 [重复]
【发布时间】:2011-11-02 19:37:46
【问题描述】:

我有一些工作代码:

String objstr = "{\"m_children\":[{\"m_children\":null,\"m_name\":\"child0\"},{\"m_children\":null,\"m_name\":\"child1\"}],\"m_name\":\"Root\"}";
byte[] byteArr = Encoding.ASCII.GetBytes(objstr);
MemoryStream ms = new MemoryStream(byteArr);
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Node));

Node obj = (Node)ser.ReadObject(ms);

让我烦恼的是,我必须在解码之前知道字符串中包含的对象的类型。我想通过 TCP 管道发送以 JSON 编码的对象,而不必发送有关对象类型的额外信息。

【问题讨论】:

  • json 只能序列化普通对象。你不能使用其他允许打字的序列化形式吗?
  • Dynamic?@einacio,他们特别要求“不必发送有关对象类型的额外信息”,例如 xsd。
  • 所以@Almo 想要在静态类型语言上进行魔术打字。可以将类型作为 json 中的额外数据发送,但我不知道 c++ 是否可以使用字符串而不是类名 php-style 来创建对象
  • 我想知道为什么序列化程序在其输出中不包含任何类型信息。我找到了一个 .net 序列化程序可以使用的地方,但它似乎是非标准的,并且不适用于 .net 之外的序列化程序。而且我不在 C++ 中。

标签: c# json


【解决方案1】:

附加信息:

http://www.codeproject.com/KB/IP/fastJSON.aspx

当这个库对 JSON 进行编码时,它会提供足够的信息来进行全自动重新解析。

但这不太适合我的目的,因为它包含一堆 C# 特定的信息,而且我们在这里跨语言工作。

【讨论】:

    【解决方案2】:

    使用 .NET 4.0,您可以使用动态对象。为什么不从另一个问题尝试这个解决方案:Deserialize JSON into C# dynamic object?

    【讨论】:

    • 谢谢,我会在升级到 VS2010 后查看。
    • 我认为如果您不使用 VS2010,则需要使用集合创建自己的序列化器/反序列化器,例如 Dictionary 对象来表示 JSON 字段名称和值。
    • 好的,感谢您的建议。 :)
    猜你喜欢
    • 2020-03-13
    • 1970-01-01
    • 2012-01-23
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    • 1970-01-01
    相关资源
    最近更新 更多