【问题标题】:deserialize JSON object receive via REST API (c# web api 2)反序列化通过 REST API 接收的 JSON 对象(c# web api 2)
【发布时间】:2014-09-08 07:00:34
【问题描述】:

我正在使用 WebRequest 将 JSON 对象发送到休息服务器。 ContentType 设置为 application/json

原始类被序列化为 JSON 字符串,然后将字符串转换为字节(使用 BlockCopy 使其成为 unicode)并通过 HTTP 发送。

在服务器端,我查看一个 JContainer 对象而不是字符串(可能是内容类型的 b/c)

如何使用 JSON.NET 直接反序列化此对象?

我能够将其转换为字符串,然后对其进行反序列化,但由于字符串不可读(许多 \0 来自 unicode 转换......),我无法追踪一些错误。

我的问题是 - 我可以反序列化原始 JSON 对象吗? 有没有办法将此对象转换为常规的 ASCII 字符串?

public void Put(MyClass cls)
{
}

// I get nothing

public void Put(JContainer cls)
{
    string myjson = cls.ToString()
** Update: This string is the original JSON but in UNICODE.
** this text doesn't deserialized to the original class.

}

【问题讨论】:

  • 写这行会得到什么 - dynamic dynObj = JsonConvert.DeserializeObject(json);
  • DeserializeObject 想要一个字符串。我得到一个对象,我发现它是 JContainter 对象。
  • 当您说“我审查 JContainer 对象而不是字符串”时,您的确切意思是什么?这是端点中的参数吗?如果是这样,它在代码中是什么类型?如果它是一个对象而不是 json.net 可能会为您反序列化为通用对象,这意味着您可以只使用所需的对象作为参数类型,并且应该注意事项。
  • 更好 - 发布您的网络方法的代码,以便我们了解您已经尝试过的内容。
  • 自动转换不起作用(可能是因为它是一个超出自动转换器范围的嵌套类),所以如果我使用实际类作为参数,我会在所有属性中得到 null。

标签: c# json rest asp.net-web-api


【解决方案1】:

问题在于编码。 使用 ASCII 编码而不是 Unicode 解决了所有反序列化问题。 只需将 JContainer.ToString() 发送到 Deserialize 函数即可。

【讨论】:

  • 这听起来很可疑。您确定非 ASCII 字符在此过程中没有丢失吗?
  • 在这种情况下,您可以只要求您反序列化到的实际类作为参数。 JContainer是原始json的反序列化
  • 它按照您的描述工作,但前提是我发送编码为 ASCII 的 JSON。一旦它变成 unicode,反序列化就会失败。
猜你喜欢
  • 2019-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-29
相关资源
最近更新 更多