2 回答

TA貢獻1805條經驗 獲得超10個贊
問題是你正在比較在 JS中有一個OBJECT然后將它轉換為 JSON,在 C# 中有一個STRING然后將它轉換為 JSON。
如果您有一個 C# 對象,則等效JSON.stringify()于JsonConvert.SerializeObject(myObject). C# 不接受 JSON 語法(就像 JS 一樣)來定義對象。
在您發布的 MDN 示例中,您會看到:
console.log(JSON.stringify({ x: 5, y: 6 }));
c# 等價物是(運行它):
Console.WriteLine(JsonConvert.SerializeObject(new { x = 5, y = 6 });
但這正是 C# 語法的工作方式(Javascript 允許 JSON 定義對象而不必解析它們......C# 有不同的語法來定義內聯對象 - 匿名或非 - )。
Javascript 中與您發布的示例(有一個字符串,而不是一個對象)等效的是:
const jsString = '{"test": "test"}';
console.log(JSON.stringify(JSON.parse(jsString)));
這與僅使用,有點不同JSON.stringify(),并且與您在 C# 中看到的內容相匹配(反序列化然后序列化)
另請注意,Javascript 允許定義對象的語法不一定是“嚴格有效的 JSON”……上面的字符串會失?。?/p>
const jsString = '{ test: "test" }';
而這種定義對象的方式是有效的:
const jsObject = { test: "test" };
(事實上,這就是您可能希望在調用時對其進行“規范化”的原因)
說了這么多
如果反序列化/序列化是“外觀”中的問題,只需制作一個擴展方法......類似于:
public static string NormalizeJson(this string input) {
return JsonConvert.SerializeObject(JsonConvert.DeserializeObject<object>(input));
}
然后你可以在任何字符串上執行此操作(如果你using在頂部添加了):
myJsonInput.NormalizeJson();

TA貢獻1895條經驗 獲得超7個贊
我想你錯過了格式化,它可能是
public static string NormalizeJson(this string value)
{
return JsonConvert.SerializeObject(JsonConvert.DeserializeObject<object>(value), Newtonsoft.Json.Formatting.Indented);
}
- 2 回答
- 0 關注
- 191 瀏覽
添加回答
舉報