从动态 ExpandoObject 生成 JSON 字符串
Generate JSON string from dynamic ExpandoObject
我正在使用 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
工具:
using Newtonsoft.Json;
/// skip a bunch of other implementation details.
var json = Newtonsoft.Json.JsonConvert.SerializeObject(reply);
我就是这样做的。
只需下载 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 是一个对象,其字段在 运行时 定义,不同于 fields/properties/methods ..定义在 compile-time。为了能够在 run-time 处定义它们,expando 对象在内部包含一个字典,它是 key-value 对的集合。
我不知道这个助手是如何工作的,但它可能只是一个简单的序列化程序,这就是为什么它序列化为键值对数组而不是您期望的实际对象。库 Newtonsoft.Json 几乎是 c# 项目的标准,并且显然了解 Expando 对象的内部工作方式。
我正在使用 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
工具:
using Newtonsoft.Json;
/// skip a bunch of other implementation details.
var json = Newtonsoft.Json.JsonConvert.SerializeObject(reply);
我就是这样做的。
只需下载 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 是一个对象,其字段在 运行时 定义,不同于 fields/properties/methods ..定义在 compile-time。为了能够在 run-time 处定义它们,expando 对象在内部包含一个字典,它是 key-value 对的集合。
我不知道这个助手是如何工作的,但它可能只是一个简单的序列化程序,这就是为什么它序列化为键值对数组而不是您期望的实际对象。库 Newtonsoft.Json 几乎是 c# 项目的标准,并且显然了解 Expando 对象的内部工作方式。