如何将动态对象转换为JSON字符串(C#)?

17

我从第三方库中获取了以下动态对象:

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'。

有什么建议吗?


展示您想要转换的对象。 - Hitesh Thakor
string json = Newtonsoft.Json.JsonConvert.SerializeObject(foo); - Rashid Javed
1
@user3378165 - 是的,请展示一下如何创建Requirements,因为当我们只是简单测试一个包含多个字段的动态对象列表时,它们都被序列化了。 - Gilad Green
1
你所尝试的操作看起来完全正确。请参考这个可行的例子。我们需要查看Requirements属性的声明/定义才能帮助您。 - Good Night Nerd Pride
1
@user3378165,抱歉,但您的编辑并没有帮助。Console.WriteLine(order.Title.Commitments[0].Requirements.GetType());会打印什么?请向我们展示该字符串。此外,您一直在说您正在使用第三方库。哪个库?是否有文档可用?最重要的是:您如何知道返回的JSON是“损坏”的,正如您所说的那样?您的参考是什么?您到底希望看到什么? - Good Night Nerd Pride
显示剩余9条评论
2个回答

14

你试过使用 var 而不是 dynamic 吗?

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

当你只想反序列化 requirements 而不执行其他操作时,就无需动态使用它。


谢谢您的回答,但我得到了相同的JSON,只有ID。还有其他想法吗? - user3378165
去找那些维护第三方库的人聊聊吧。我猜他们在子类化“DynamicObject”时犯了一个错误。 - Good Night Nerd Pride
这也是我的想法...我已经给他们发了电子邮件,让我们等待看看..感谢您的帮助! - user3378165
1
你有没有检查过编译器中的“var”实际上是什么意思? - Bartosz

6
尝试使用以下代码中的Convert.ToString()将“动态”对象转换为“字符串” - ``` Convert.ToString(dynamicObject) ```
dynamic order = (dynamic)orderFound;
dynamic requirements = order.Title.Commitments[0].Requirements;
string validString = Convert.ToString(requirements);

这在ASP.NET中非常有效,其中无法使用var - rboy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接