我正在使用休息服务但是当我对JSON字符串进行序列化时会抛出此异常吗?这个例外是什么意思?
public class Product
{
public string PROD
{
get { return prod; }
set { prod = value; }
}
//Department Number
[JsonProperty("DPID")]
public int DPID
{
get { return dpid; }
set { dpid = value; }
}
//Sub Department Number
[JsonProperty("SDID")]
public int SDID
{
get { return sdid; }
set { sdid = value; }
}
//Category Number
[JsonProperty("CGID")]
public int CGID
{
get { return cgid; }
set { cgid = value; }
}
//Sub Category Number
[JsonProperty("SCID")]
public int SCID
{
get { return scid; }
set { scid = value; }
}
//Product Description
[JsonProperty("PDSC")]
public string PDSC
{
get { return pdsc; }
set { pdsc = value; }
}
//Product Brand
[JsonProperty("PBRN")]
public string PBRN
{
get { return pbrn; }
set { pbrn = value; }
}
//Season Code
[JsonProperty("SESN")]
public string SESN
{
get { return sesn; }
set { sesn = value; }
}
//Issue Quantity
[JsonProperty("IQTY")]
public string IQTY
{
get { return iqty; }
set { iqty = value; }
}
//Currency Code
[JsonProperty("CURR")]
public string CURR
{
get { return curr; }
set { curr = value; }
}
//Selling Price
[JsonProperty("SELL")]
public decimal SELL
{
get { return sell; }
set { sell = value; }
}
//Product SKU Code
[JsonProperty("PSKU")]
public string PSKU
{
get { return psku; }
set { psku = value; }
}
//Product Size
[JsonProperty("PSZE")]
public string PSZE
{
get { return psze; }
set { psze = value; }
}
//Product Colour
[JsonProperty("PCOL")]
public string PCOL
{
get { return pcol; }
set { pcol = value; }
}
//Pre-pack Code
[JsonProperty("PPCD")]
public string PPCD
{
get { return ppcd; }
set { ppcd = value; }
}
//Image URL
public string IURL
{
get { return iurl; }
set { iurl = value; }
}
[JsonProperty("DPDS")]
public string DPDS
{
get { return dpds; }
set { dpds = value; }
}
}
这是我用来使用其余服务然后它给我发送一个JSON字符串,我将其序列化为一个名为products的Observable Collection类型的对象。
public ObservableCollection<Product> products = new ObservableCollection<Product>();
public async Task<ObservableCollection<Product>> GetProducts()
{
try
{
string uri = url + "/product;
_client.Timeout = TimeSpan.FromSeconds(300);
HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Get, uri);
var response2 = await _client.SendAsync(message);
if (response2.IsSuccessStatusCode)
{
var content = await response2.Content.ReadAsStringAsync();
var prodlist = JsonConvert.DeserializeObject<ObservableCollection<Product>>(content);
products = prodlist;
return products;
}
else if (response2.StatusCode == HttpStatusCode.NotFound)
{
return products;
}
return products;
}
catch (JsonException ex)
{
throw ex;
}
}
调用时,URI会返回此格式的大字符串。
{
"PROD": "5510B-BK ",
"DPID": 0,
"SDID": 0,
"CGID": 0,
"SCID": 0,
"SPID": 0,
"PDSC": "5510B BLACK BOAT SHOE ",
"PBRN": "Footwear Direct",
"SESN": "2018 ",
"IQTY": "Pair ",
"CURR": "ZAR",
"SELL": 0,
"PSKU": "5510B-BK ",
"PSZE": "12 ",
"PCOL": "BK ",
"PPCD": "A ",
"DPDS": "None "
}
请注意,这就是拉动单个产品时所说的,但是当拉动所有对象时,同样的事情就会发生变化。
转换值“{”PROD“:”5510B-BK“,”DPID“:0,”SDID“:0,”CGID“:0,”SCID“:0,”SPID“:0,”PDSC“:” 5510B BLACK BOAT SHOE“,”PBRN“:”Footwear Direct“,”SESN“:”2018“,”IQTY“:”Pair“,”CURR“:”ZAR“,”SELL“:0.0000,”PSKU“:” 5510B-BK“,”PSZE“:”12“,”PCOL“:”BK“,”PPCD“:”A“,”DPDS“:”无“}”输入'WarehouseProMobile.Models.Product'。路径'',第1行,第427位。
原来我的其余API序列化为JSON,当对象通过网络发送时,Web服务器也序列化了我的对象,这使得字符串无用。通过将API调整为仅发送对象来解决此问题。
这是你的POCO:
public class Product
{
public string PROD { get; set; }
//Department Number
[JsonProperty("DPID")]
public int DPID { get; set; }
//Sub Department Number
[JsonProperty("SDID")]
public int SDID { get; set; }
//Category Number
[JsonProperty("CGID")]
public int CGID { get; set; }
//Sub Category Number
[JsonProperty("SCID")]
public int SCID { get; set; }
//Product Description
[JsonProperty("PDSC")]
public string PDSC { get; set; }
//Product Brand
[JsonProperty("PBRN")]
public string PBRN { get; set; }
//Season Code
[JsonProperty("SESN")]
public string SESN { get; set; }
//Issue Quantity
[JsonProperty("IQTY")]
public string IQTY { get; set; }
//Currency Code
[JsonProperty("CURR")]
public string CURR { get; set; }
//Selling Price
[JsonProperty("SELL")]
public decimal SELL { get; set; }
//Product SKU Code
[JsonProperty("PSKU")]
public string PSKU { get; set; }
//Product Size
[JsonProperty("PSZE")]
public string PSZE { get; set; }
//Product Colour
[JsonProperty("PCOL")]
public string PCOL { get; set; }
//Pre-pack Code
[JsonProperty("PPCD")]
public string PPCD { get; set; }
//Image URL
public string IURL { get; set; }
[JsonProperty("DPDS")]
public string DPDS { get; set; }
}
将您的操作方法修改为:
public async Task<ObservableCollection<Product>> GetProducts()
{
try
{
string uri = url + "/product;
_client.Timeout = TimeSpan.FromSeconds(300);
HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Get, uri);
var response2 = await _client.SendAsync(message);
ObservableCollection<Product> products = new ObservableCollection<Product>();
if (response2.IsSuccessStatusCode)
{
var content = await response2.Content.ReadAsStringAsync();
Product product = JsonConvert.DeserializeObject<Product>(content);
products.Add(product);
}
return products;
}
catch (Exception ex)
{
throw ex;
}
}
这就是我通常做的事情:
我创建了一个匹配JSON attrs的类(尝试在可能的情况下使用nullable):
public class Testingo
{
public class Obj
{
public string PROD { get; set; }
public int? DPID { get; set; }
public int? SDID { get; set; }
public int? CGID { get; set; }
public int? SCID { get; set; }
public int? SPID { get; set; }
public string PDSC { get; set; }
public string PBRN { get; set; }
public string SESN { get; set; }
public string IQTY { get; set; }
public string CURR { get; set; }
public int? SELL { get; set; }
public string PSKU { get; set; }
public string PSZE { get; set; }
public string PCOL { get; set; }
public string PPCD { get; set; }
public string DPDS { get; set; }
}
}
然后,我只想写:
var jsonisedObject = JsonConvert.DeserializeObject<List<Testingo.Obj>>(jsonStringHere);
将jsonStringHere
更改为包含实际JSON数据的字符串
您可以要求Visual Studio为您生成一个JSON就绪类。只需复制json数据然后在类中,单击Edit-> Paste Special-> Paste Json作为类!