Quiero deserializar este objeto de JSON:

{"domain":"google.com","data":{"available":true,"expiration":null,"registrant_email":null}}

Utilizo este código:

public class Data
{
    public string available { get; set; }
}

Data data = JsonConvert.DeserializeObject<Data>(finishResponse);
Console.WriteLine(data.available);

Por favor ayúdame por eso!

0
Antony Born 15 dic. 2019 a las 10:54

2 respuestas

La mejor respuesta

Su clase no coincide con el JSON ... Aquí hay un par de clases que sí coinciden con el JSON:

public class MyJson
{
    [JsonProperty("domain")]
    public string Domain { get; set; }

    [JsonProperty("data")]
    public Data Data { get; set; }
}

public partial class Data
{
    [JsonProperty("available")]
    public bool Available { get; set; }

    // This should probably be a nullable DateTime
    [JsonProperty("expiration")]
    public object Expiration { get; set; } 

    // And this should probably be a string...
    [JsonProperty("registrant_email")]
    public object RegistrantEmail { get; set; }
}

Los he generado en línea directamente desde su JSON.

0
Zohar Peled 15 dic. 2019 a las 08:02

Intenta con este cambio. De esta manera, sus clases de C # coincidirán con el objeto JSON que está recibiendo. Por supuesto, debe extender la clase Data para incluir el resto de los campos json si son de su interés.

  public class Response
  {
      [JsonProperty(Required = Required.Default)]
      public string Domain { get; set; }

      [JsonProperty(Required = Required.Always)]
      public Data Data { get; set; }
  }

Notarás que agregué lo requerido a AllowNull para Expiration + RegistrantEmail y la propiedad Data a Always. Si envía nulo para Data, la deserialización fallará.

  public partial class Data
  {
      [JsonProperty(Required = Required.Default)]
      public bool Available { get; set; }

      [JsonProperty(Required = Required.AllowNull)]
      public object Expiration { get; set; } 


      [JsonProperty("registrant_email" ,Required = Required.AllowNull)]
      public object RegistrantEmail { get; set; }
  }

  var response = JsonConvert.DeserializeObject<Response>(finishResponse);
  Console.WriteLine(response.Data.available);

Esta respuesta también considera que algunos de los campos en su cadena json serializada pueden ser nulos y, por lo tanto, no arrojarán excepciones si ese es el caso.

1
Sina Hoseinkhani 15 dic. 2019 a las 09:29