【问题标题】:JObject to anonymous object with unkown type structure | C#JObject 到具有未知类型结构的匿名对象 | C#
【发布时间】:2020-03-19 20:47:04
【问题描述】:

我正在尝试将 JObject 转换为对象。 我有一个带有 ASP.NET 框架的 WEB-API,在其中我得到了一个具有对象属性的请求对象。 此对象属性具有完全未知的结构,可以具有不同的属性或子对象(这取决于发送系统)。我的问题是将这些 JObject 解析/转换为对象。

匿名对象的序列化超级简单,对象定义很清楚,但是反过来怎么办呢?

我有以下控制器:

[HttpPost]
[Route("insert")]
public IHttpActionResult Insert(RequestObject ro)
{
}

此控制器接收以下 JSON-Body:

{
 "SystemName":"S1_K3",
 "MetaInformation":{
  "Prop1":"X1",
  "Prop3": 12,
  "X1":{
   "User":"XYZ",
   "Session":4
  }
 }
}

这个 JSON-Body 在我的代码中被定义为一个类,如下所示:

public class RequestObject {
 public string SystemName { get; set;}
 public object MetaInformation { get; set;}
} 

如您所见,MetaInformation 来自“对象”类型,因此可以使用 json 中提供的信息填充它。但是当我在控制器中接收到对象时,属性 MetaInformation 是 JObject 类型的对象。 我怎样才能实现我的对象如下所示:

object metaInformation = new{
 Prop1="X1",
 Prop3=12,
 X1=new{
  User="XYZ", 
  Session=4
 }
};

请记住,我不知道运行时的对象结构。

感谢所有可以提供帮助的人!

【问题讨论】:

  • A JObject is 一个对象——你只是在编译时不知道它的属性。这有帮助吗? stackoverflow.com/questions/16097768
  • 如果你可以将它序列化为一些众所周知的结构,如 xml 或 json,有流行的库来解析和反序列化它们。例如,您可以获得字典,或者有一些预定义的选项。在 worst 有 dynamic 类型,但如果可能的话会避免这种情况(没有编译时检查)
  • 如果你需要静态/强类型的对象,你可以有JsonConverters。否则,dynamic 或 JObject 应该不错。
  • 我已经更新了描述,所以现在应该更容易理解了。

标签: c# asp.net object json.net


【解决方案1】:

我找到了解决问题的方法,因为每个系统都可以向我发送我创建的其他信息 IEnumerable<KeyValuePair<string,string>> 属性而不是我的对象。 所以每个系统都可以向我发送它们的元信息,并且类型对于序列化和反序列化是明确的。

【讨论】:

    猜你喜欢
    • 2018-02-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多