【问题标题】:How to convert a dynamic object to JSON string c#?如何将动态对象转换为 JSON 字符串 c#?
【发布时间】:2016-08-08 09:03:03
【问题描述】:

我有以下从第三方库获取的动态对象:

IOrderStore os = ss.GetService<IOrderStore>();
IOrderInfo search = os.Orders.Where(t => t.Number == "test").FirstOrDefault();
IOrder orderFound = os.OpenOrder(search, true);

dynamic order = (dynamic)orderFound;
dynamic requirements = order.Title.Commitments[0].Requirements;

我需要将其解析为 JSON 字符串。

我试过这个(使用 JSON.net):

string jsonString = JsonConvert.SerializeObject(requirements);
return jsonString;

但我得到一个看似损坏的 JSON 字符串,如下所示:

[{"$id":"1"},{"$id":"2"},{"$id":"3"},{"$id":"4"},{" $id":"5"},{"$id":"6"},{"$id":"7"},{"$id":"8"},{"$id":"9 "},{"$id":"10"},{"$id":"11"},{"$id":"12"},{"$id":"13"},{"$ id":"14"},{"$id":"15"}]

对象包含多个属性,而不仅仅是“id”。

有什么建议吗?

【问题讨论】:

  • 显示您要转换的对象
  • 'string json = Newtonsoft.Json.JsonConvert.SerializeObject(foo);'
  • @user3378165 - 是的,请展示Requirements 的创建方式,因为当只是简单地测试动态对象列表并且每个对象都有几个字段时,它们都被序列化了
  • 您正在尝试做的事情看起来完全正确。见this working example。我们需要查看Requirements属性的声明/定义以便为您提供帮助。
  • @user3378165,抱歉,您的修改没有帮助。 Console.WriteLine(order.Title.Commitments[0].Requirements.GetType()); 打印什么?请给我们看那个字符串。此外,您一直说您正在使用第三方库。哪个图书馆?有可用的文档吗?最重要的是:你怎么知道返回的 JSON 是“损坏的”,正如你所说的那样?你的参考是什么?您究竟希望看到什么?

标签: c# json serialization


【解决方案1】:

您是否尝试过使用var 而不是dynamic

// Use "var" in the declaration below.
var requirements = order.Title.Commitments[0].Requirements;
string jsonString = JsonConvert.SerializeObject(requirements);

如果您只想反序列化 requirements 而不用它做任何其他事情,那么就没有必要使用它 dynamically。

【讨论】:

  • 感谢您的回答,但我得到了相同的 JSON,只有 ID。还有其他想法吗?
  • 是的,与维护第 3 方库的人交谈。我的猜测是他们在继承 DynamicObject 时犯了一个错误。
  • 我也是这么想的……我给他们发了邮件,让我们看看……谢谢你的帮助!
  • 您是否检查过“var”对编译器的实际含义??
【解决方案2】:

尝试使用 Convert.ToString() 如下代码将“动态”对象转换为“字符串”-

dynamic order = (dynamic)orderFound;
dynamic requirements = order.Title.Commitments[0].Requirements;
string validString = Convert.ToString(requirements);

【讨论】:

  • 这在无法使用var 的 ASP.NET 中效果很好
猜你喜欢
  • 2014-02-08
  • 1970-01-01
  • 2022-01-01
  • 1970-01-01
  • 2015-07-12
  • 2018-01-06
  • 2012-08-28
  • 1970-01-01
相关资源
最近更新 更多