Как я могу десериализовать JSON для объекта? Мои попытки заканчиваются JObject, а не объектом с моими свойствами. Как мне избежать этого? - PullRequest
0 голосов
/ 18 апреля 2019

Я хочу преобразовать что-то вроде этого {\"ref\":\"/my/path\",\"action\":\"set\",\"payload\":\"\"}

в общий объект в C #.То, что я пробовал, это

object  mess1 = JObject.Parse(message);
dynamic mess2 =  JsonConvert.DeserializeObject<object>(message);
dynamic mess3 = JValue.Parse(message);

Ожидаемый результат будет объект со свойствами ref, action и set.Фактическим результатом является объект, содержащий JObject

ChildrenTokens Count First
HasValues ​​Last Next Parent ...

они не являются частью моего объекта.Как правильно это сделать?

Полезная нагрузка в этом сообщении - это строка ИЛИ произвольный объект.Полезная нагрузка должна быть записана в базу данных, и мне все равно, что она содержит.

Ответы [ 4 ]

0 голосов
/ 18 апреля 2019

Под «объектом с моими свойствами» вы подразумеваете то, что часто называют POCO .Вы должны определить объект POCO следующим образом:

public class Poco  
{
  public string Ref { get; set; }
  public string Action { get; set; }
  public string Payload { get; set; }  
}

Затем десериализовать ваш JSON следующим образом:

 string json = "{'ref':'/my/path','action':'set','payload':''}";
 Poco myPoco = JsonConvert.DeserializeObject<Poco>(json);

Теперь у вас будет myPoco.Ref, myPoco.Action, myPoco.Payloadсвойства заполнены из вашего JSON.

0 голосов
/ 18 апреля 2019

Вы можете десериализовать его в динамический объект с помощью:

 dynamic parsed = JObject.Parse("ref\":\"/my/path\",\"action\":\"set\",\"payload\":\"\");

И доступ к вашим свойствам, как и любой другой объект:

Console.WriteLine(parsed.ref); // "/my/path/"
Console.WriteLine(parsed.action); // "set"
Console.WriteLine(parsed.payload); // "\"
0 голосов
/ 18 апреля 2019

Мы обычно используем этот метод

public static JObject JsonParsed(string Json)
    {
        return JObject.Parse(Json);
    }
0 голосов
/ 18 апреля 2019

JObject.Parse создает экземпляр JObject. Вы можете сделать это несколькими способами, если у вас уже есть JObject, вы можете сделать следующее:

var obj = JObject.Parse(json);
var command = obj.ToObject<Command>();

Или вы можете работать со строкой:

var command = JsonConvert.Deserialize<Command>(json);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...