Wyc*_*yck 9 c# json 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);
Run Code Online (Sandbox Code Playgroud)
(注意,上面需要对 System.Web.Helpers 程序集的引用。)
我希望这能输出字符串:
{"name":"John","wins":42}
Run Code Online (Sandbox Code Playgroud)
但它实际上输出:
[{"Key":"name","Value":"John"},{"Key":"wins","Value":42}]
Run Code Online (Sandbox Code Playgroud)
我需要更改什么才能获得我希望的输出?
car*_*rio 11
只需下载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);
Run Code Online (Sandbox Code Playgroud)
编辑:
我只是想更好地解释为什么在使用该System.Web.Helpers.Json.Encode方法时会得到该结果。
一个ExpandoObject是哪些字段在定义的对象的运行时,比字段/属性/方法..是在编译时定义的正则对象不同。为了能够在运行时定义它们, expando 对象在内部保存了一个字典,它是一个键值对的集合。
我不知道这个助手是如何工作的,但它可能只是一个简单的序列化器,这就是为什么它序列化为键值对数组而不是您期望的实际对象。Newtonsoft.Json 库几乎是 c# 项目的标准,并且显然知道 Expando 对象在内部是如何工作的。
| 归档时间: |
|
| 查看次数: |
5190 次 |
| 最近记录: |