gpt4 book ai didi

c# - 如何像 JSON.stringify() 那样在 C# 中对 json 进行字符串化/规范化

转载 作者:行者123 更新时间:2023-12-05 01:40:49 24 4
gpt4 key购买 nike

我想知道是否有比这更好、更不随意的方式来处理 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 库。

JSON.stringify 可以实现互操作性,所有 Javascript 字符串的输入,无论是对象表示法还是已经字符串化。所以我想知道是否有比我提到的更好的处理方法。如果已经内置到框架中就更好了。

可以在 MDN Web Docs 找到一个 Playground .

有一个例子在https://github.com/ethereum/wiki/wiki/JavaScript-API#web3tohex即使出现相同的 {test: 'test'} JSON 对象也首先被字符串化,然后进行 HEX 编码。在 C# 中也可能存在这样的情况,即从其他来源读取字符串并且无论如何输出都需要采用字符串化形式。

最佳答案

问题是您正在比较在 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# 等价物是 ( run it ):

 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”……上面的字符串会失败:

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

See it in action

关于c# - 如何像 JSON.stringify() 那样在 C# 中对 json 进行字符串化/规范化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55787381/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com