亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何像 JSON.stringify() 那樣在 C# 中對 json 進行字符串化/規范化

如何像 JSON.stringify() 那樣在 C# 中對 json 進行字符串化/規范化

C#
子衿沉夜 2022-12-24 12:49:32
我想知道是否有比這更好、更不隨意的方式來處理 JSON 字符串,就像 JSON.Stringify 所做的那樣?string json = "{test: 'test'}";var stringified = JsonConvert.SerializeObject(JsonConvert.DeserializeObject<dynamic>(json));Console.WriteLine(stringified); //Prints {"test":"test"}似乎在 C# 中沒有一種規范化字符串表示的方法。我不確定新的 .NET Core 3.0 及其新的 JSON 庫。<edit: 為了讓評論更明顯一點,JSON.stringifyJavascript 字符串的所有輸入都可能存在互操作性情況,無論是對象表示法還是已經字符串化。所以我想知道是否有比我提到的更好的處理方法。如果已經內置到框架中就更好了??梢栽贛DN Web Docs找到一個游樂場。在https://github.com/ethereum/wiki/wiki/JavaScript-API#web3tohex上有一個示例,即使是相同的{test: 'test'}JSON 對象也首先被字符串化,然后進行 HEX 編碼。在 C# 中也可能存在這樣的情況,即從其他來源讀取字符串并且無論如何輸出都需要采用字符串化形式。
查看完整描述

2 回答

?
holdtom

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();

看看它的實際效果


查看完整回答
反對 回復 2022-12-24
?
人到中年有點甜

TA貢獻1895條經驗 獲得超7個贊

我想你錯過了格式化,它可能是


public static string NormalizeJson(this string value)

{

  return JsonConvert.SerializeObject(JsonConvert.DeserializeObject<object>(value), Newtonsoft.Json.Formatting.Indented);

}


查看完整回答
反對 回復 2022-12-24
  • 2 回答
  • 0 關注
  • 191 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號