gpt4 book ai didi

c# - 从动态 ExpandoObject 生成 JSON 字符串

转载 作者:太空宇宙 更新时间:2023-11-03 18:51:46 25 4
gpt4 key购买 nike

我正在使用 C# 并尝试从动态 对象生成 JSON 字符串。

dynamic reply = new System.Dynamic.ExpandoObject();
reply.name = "John";
reply.wins = 42;
string json = System.Web.Helpers.Json.Encode(reply);
System.Console.WriteLine(json);

(注意,以上内容需要引用 System.Web.Helpers 程序集。)

我希望这能输出字符串:

{"name":"John","wins":42}

但它实际输出:

[{"Key":"name","Value":"John"},{"Key":"wins","Value":42}]

我需要更改什么才能获得我希望的输出?

最佳答案

只需下载 Newtonsoft.Json Nuget 包。

这是在 C# 中使用 json 的首选方式。您使用 Newtonsoft 的代码将是:

    dynamic reply = new System.Dynamic.ExpandoObject();
reply.name = "John";
reply.wins = 42;
string json = Newtonsoft.Json.JsonConvert.SerializeObject(reply);
System.Console.WriteLine(json);

编辑:

我只是想更好地解释为什么在使用 System.Web.Helpers.Json.Encode 方法时会得到这样的结果。

ExpandoObject 是一个在运行时定义字段的对象,不同于在编译时定义字段/属性/方法的常规对象。为了能够在运行时定义它们,expando 对象在内部包含一个字典,它是键值对的集合。

我不知道这个助手是如何工作的,但它可能只是一个简单的序列化程序,这就是为什么它序列化为键值对数组而不是您期望的实际对象的原因。库 Newtonsoft.Json 几乎是 c# 项目的标准,并且显然了解 Expando 对象的内部工作方式。

关于c# - 从动态 ExpandoObject 生成 JSON 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56588362/

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