这两种JSON格式有什么区别?

4th*_*ace 8 c# asp.net-mvc json visual-studio

我有以下简单的类:

public class Test
{
    public string property1 { get; set; }
    public string property2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

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

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

我得到的JSON如下所示:

在此输入图像描述

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

如果我改为以字符串形式提交相同的类,它可以正常工作:

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

但它在Visualizer中看起来像这样:

在此输入图像描述

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

任何想法为什么类序列化不起作用?

nik*_*itz 1

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

{
    "property1": "p1",
    "property2": "p2"
}
Run Code Online (Sandbox Code Playgroud)

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

{ "{\"property1\":\"p1\",\"property2\":\"p2\"}" }
Run Code Online (Sandbox Code Playgroud)

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

var serializedData2 = JsonConvert.DeserializeObject(test);
Run Code Online (Sandbox Code Playgroud)

它应该返回 JSON 的键值:

{
    "property1": "p1",
    "property2": "p2"
}
Run Code Online (Sandbox Code Playgroud)

我猜空值来自其他地方。