在提出地址Web服务请求时,我得到以下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.
有人知道如何解决或有更好的建议吗?提前谢谢!
答案 0 :(得分:0)
你在这里双重序列化。
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);