c# - 一路反序列化成dynamic?

标签 c# json.net

我正在使用 json.net 并且非常喜欢它。但是,当我反序列化为动态时,我在底部没有得到字符串、整数等,我得到了 JValue 对象,例如

  string json = "[{'x':'1', 'y':'1'}, {'x': '2', 'y': '2'}]";
  dynamic[] rg = JsonConvert.DeserializeObject<dynamic[]>(json);
  //var x2 = rg.First(pt => pt.x.Equals("2"));// JValue has no Equals method
  var x2 = rg.First(pt => pt.x.ToString().Equals("2")); // have to convert to string
  Console.WriteLine(x2);

如果 x 作为转换的一部分被转换为 .NET 字符串,那么我会有一个 Equals 方法。相反,我必须在底层 JValue 上调用 ToString 以获取 Equals 方法。有没有办法将 json.net JsonConvert 配置为一直向下转换而不是使用 JValue 对象?我在 JsonSerializerSettings 中看不到任何明显的内容。谢谢!

最佳答案

您是否尝试过使用 == 运算符?似乎没有“不必要的仪式”也能得到同样的结果。

var x2 = rg.First(pt => pt.x == "2");

关于c# - 一路反序列化成dynamic?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21247403/

相关文章:

c# - 有人想转发它吗?

c# - 在 .NET 中迭代匿名类型的集合

c# - Json.net反序列化具有并发集合的复杂对象

c# - 使用空白数组反序列化 JSON 对象

json - F#:如何将 Json.NET [JsonConstructor] 属性应用于主构造函数?

c# - JsonObjectAttribute.Id 是什么?

c# - 该属性必须是有效的实体类型,并且该属性应该具有非抽象 getter 和 setter。 Entity Framework

c# - Windows 窗体中的多个用户

c# - 托管库和非托管库有什么区别?

c# - IgnoreDataMember 不起作用,但 JsonIgnore 起作用