JObject для анонимного объекта со структурой неизвестного типа | C# - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь преобразовать объект JObject в объект . У меня есть WEB-API с фреймворком ASP. NET, где я получаю объект запроса, который имеет свойство объекта. Это свойство объекта имеет совершенно неизвестную структуру и может иметь различные свойства или дочерние объекты (это зависит от отправляющей системы). Моя проблема заключается в том, чтобы проанализировать / преобразовать эти 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 -Тело определяется как Класс в моем коде выглядит следующим образом:

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

Как вы можете видеть, MetaInformation имеет тип 'object', поэтому его можно заполнить информацией, представленной внутри json. Но когда я получаю объект внутри моего контроллера, свойство MetaInformation является объектом типа JObject. Как мне добиться, чтобы мой объект выглядел следующим образом:

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

Имейте в виду, что я не знаю структуру объекта во время выполнения.

Спасибо всем, кто может помочь!

1 Ответ

0 голосов
/ 20 марта 2020

Я нашел решение для своей проблемы, потому что каждая система могла посылать мне другую информацию, я создал свойство IEnumerable<KeyValuePair<string,string>> вместо своего объекта. Таким образом, каждая система может посылать мне свои метаинформации, и этот тип понятен для сериализации и десериализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...