Строка объекта не может десериализовать в конкретный объект C # - PullRequest
0 голосов
/ 21 февраля 2019
  1. Сериализация данных в строковом формате
string data = "{\"VerifyOTPResult\":{\"ReturnCode\":\"200\",\"ReturnMsg\":\"Invalid OTP.\",\"Data\":{\"BrokerName\":null,\"ErrorMsg\":null,\"Id\":null,\"IsValidUser\":false,\"RoleName\":null}}}";
Класс объекта
public class VerifyOTPResult {
  public string ReturnCode { get; set; }
  public string ReturnMsg { get; set; }
  public ValidateUserResult Data { get; set; }
}

public class ValidateUserResult {
  public string Id { get; set; }
  public bool IsValidUser { get; set; }
  public string BrokerName { get; set; }        
  public string RoleName { get; set; }
  public string ErrorMsg { get; set; }
}
Использование сборки Newtonsoft.Json для DeserializeObject Попробуйте 1:
var decRes = JsonConvert.DeserializeObject<VerifyOTPResult>(content);

OUTPUT Получение значения NULL в каждом свойстве, кроме свойства int

Try 2:

var decRes1 = JsonConvert.DeserializeObject(content);

ВЫХОД

{
    "VerifyOTPResult": {
        "ReturnCode": "200",
        "ReturnMsg": "Invalid OTP.",
        "Status": null,
        "CurrentPage": 0,
        "Data": {
            "BrokerName": null,
            "ErrorMsg": null,
            "Id": null,
            "IsValidUser": false,
            "RoleName": null
        }
    }
}

Я не могу десериализовать объект.Как преобразовать его в мой класс объектов?

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Ваш JSON включает VerifyOTPResult, но на самом деле это другой объект со свойством VerifyOTPResult.Вы должны десериализовать в какой-нибудь класс-оболочку (например, VerifyOTPResultResponse)

void Main()
{
    string data = "{\"VerifyOTPResult\":{\"ReturnCode\":\"200\",\"ReturnMsg\":\"Invalid OTP.\",\"Data\":{\"BrokerName\":null,\"ErrorMsg\":null,\"Id\":null,\"IsValidUser\":false,\"RoleName\":null}}}";

    var decRes = JsonConvert.DeserializeObject<VerifyOTPResultResponse>(data);

    Console.WriteLine(decRes.VerifyOTPResult.ReturnCode);
    Console.WriteLine(decRes.VerifyOTPResult.ReturnMsg);

    // Output:
    // 200
    // Invalid OTP.
}

public class VerifyOTPResultResponse
{
    public VerifyOTPResult VerifyOTPResult { get; set; }
}

public class VerifyOTPResult
{
    public string ReturnCode { get; set; }
    public string ReturnMsg { get; set; }
    public ValidateUserResult Data { get; set; }
}

public class ValidateUserResult
{
    public string Id { get; set; }
    public bool IsValidUser { get; set; }
    public string BrokerName { get; set; }
    public string RoleName { get; set; }
    public string ErrorMsg { get; set; }
}
0 голосов
/ 21 февраля 2019

Йо может попробовать serializer.Deserialize<MyObj>(str);, например, var result=JsonConvert.DeserializeObject<List<yourObj>>(jsonString);

...