【问题标题】:What is the difference between these 2 JSON formats?这两种 JSON 格式有什么区别?
【发布时间】:2015-05-12 22:54:01
【问题描述】:

我有以下简单的类:

public class Test
{
    public string property1 { get; set; }
    public string property2 { get; set; }
}

当我尝试使用以下方法将其序列化为 JSON 时:

Test t = new Test() { property1 = "p1", property2 = "p2" };
var serializedData = JsonConvert.SerializeObject(t, Formatting.None);

我得到如下所示的 JSON:

当我尝试将它提交到 WEB API 应用程序时,它会显示为 null。我在内容标题中使用application/json

如果我以字符串开头提交相同的类,它可以正常工作:

string test = "{\"property1\":\"p1\",\"property2\":\"p2\"}";
var serializedData = JsonConvert.SerializeObject(test, Formatting.None);

但在 Visualizer 中看起来像这样:

如果我将两个字符串都粘贴到记事本中,它们看起来完全一样。

关于类序列化不起作用的任何想法?

【问题讨论】:

  • 您是从 API 控制器返回它还是从 Java 脚本发布它?当从控制器返回字符串并将其视为 json 时可能会导致麻烦,除非您明确设置内容类型。你能发布你的控制器代码吗?
  • Visual Studio 可能会将事情与过于聪明的转义混淆。要查看字符串的实际内容,请在即时窗口中键入 Debug.WriteLine(serializedData)。您将看到第一个是具有两个属性的 JSON 对象,第二个是 JSON 字符串,其内容是已转义为字符串文字的 JSON 对象。至于为什么第一种情况在服务器上显示为空,您可以分享进行调用的代码吗?
  • 你是如何将它提交给 WebAPI 的?
  • 我正在使用WebClient Upload方法提交并将其设置为POST。

标签: c# json asp.net-mvc visual-studio


【解决方案1】:

JSON 序列化工作正常。在第一种情况下,当您序列化对象时,它会返回正常的 JSON:

{
    "property1": "p1",
    "property2": "p2"
}

在第二种情况下,您已经手动序列化了 JSON,并且您正在尝试对其进行第二次序列化,这会导致新的 JSON 包含 JSON 本身作为单个值或更可能是单个键:

{ "{\"property1\":\"p1\",\"property2\":\"p2\"}" }

您可以通过运行以下代码来测试第二个字符串是否已经序列化:

var serializedData2 = JsonConvert.DeserializeObject(test);

它应该返回 JSON 的键值:

{
    "property1": "p1",
    "property2": "p2"
}

我猜 null 值来自其他地方。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 2013-09-08
    相关资源
    最近更新 更多