【问题标题】:To convert address data in json to an address object将 json 中的地址数据转换为地址对象
【发布时间】:2017-10-04 14:29:44
【问题描述】:

在请求地址网络服务时,我得到以下 Json:

{
    "cep": "04194-280",
    "logradouro": "Rua Memorial de Aires",
    "complemento": "",
    "bairro": "Jardim São Savério",
    "localidade": "São Paulo",
    "uf": "SP",
    "unidade": "",
    "ibge": "3550308",
    "gia": "1004"
}

我需要将此json转换为以下对象:

    public class Endereco
    {
        [JsonProperty("cep")]
        public string CEP { get; set; }
        [JsonProperty("logradouro")]
        public string Logradouro { get; set; }
        [JsonProperty("complemento")]
        public string Complemento { get; set; }
        [JsonProperty("bairro")]
        public string Bairro { get; set; }
        [JsonProperty("localidade")]
        public string Localidade { get; set; }
        [JsonProperty("uf")]
        public string UF { get; set; }
        [JsonProperty("ibge")]
        public string IBGE { get; set; }
        [JsonProperty("unidade")]
        public string Unidade { get; set; }
        [JsonProperty("gia")]
        public string GIA { get; set; }
    }

将json转成对象的代码如下:

using (WebClient client = new WebClient())
{
    string jsonAddress = JsonConvert.SerializeObject(client.DownloadString("http://viacep.com.br/ws/" + tboCep.Text + "/json/"));
    Addressa ddr = JsonConvert.DeserializeObject<Endereco>(jsonAddress);

    tboCidade.Text = address.Localidade; //City
    tboEstado.Text = address.UF;         // State
    tboRua.Text = address.Logradouro;    // Street
    tboBairro.Text = address.Bairro;     // District
}

但我总是收到以下错误:

Error converting value "{
  "cep": "04194-280",
  "logradouro": "Rua Memorial de Aires",
  "complemento": "",
  "bairro": "Jardim São Savério",
  "localidade": "São Paulo",
  "uf": "SP",
  "unidade": "",
  "ibge": "3550308",
  "gia": "1004"
}" to type 'ApiCorreios.Endereco'. Path '', line 1, position 269.

有人知道如何解决或有更好的建议吗?提前谢谢!

【问题讨论】:

  • 你是双重序列化。获取直接从网络调用返回的字符串并对其进行解构

标签: c# json web-services visual-studio-2015


【解决方案1】:

您在此处双重序列化。

string jsonAddress = JsonConvert.SerializeObject(client.DownloadString("http://viacep.com.br/ws/" + tboCep.Text + "/json/"));

从客户端返回的字符串已经是一个序列化的对象,你基本上是在序列化它。

获取直接从网络调用返回的字符串并对其进行反序列化

string jsonAddress = client.DownloadString("http://viacep.com.br/ws/" + tboCep.Text + "/json/");
var ddr = JsonConvert.DeserializeObject<Endereco>(jsonAddress);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-13
    • 1970-01-01
    • 2019-07-05
    • 1970-01-01
    • 2013-05-09
    • 2017-03-10
    相关资源
    最近更新 更多