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