我将尝试解释我的问题。我想在应用程序中将JSON反序列化为c#类。我的一个班级有一个object类型的属性:
public object invoiceDetails { get; set; }
我将其设置为对象类型,因为它是JSON成功反序列化的唯一类型。 JSON对象中的实际属性是类型array([])或类型object({})。当它是object类型时,它由其他一些对象组成,可以使用List <>或Dictionary <>成功地反序列化。问题是我需要将该对象属性用作列表,并尝试将其强制转换为这样的列表:
(List<InvoiceDetails)entry.Value.invoiceDetails
但是没有成功。我也尝试过将其转换为数组和字典,但再次失败。然后,我开始在互联网上寻找解决方案,找到了一些代码,最后我的代码是:
if ((entry.Value.invoiceDetails != null) && ((IList)entry.Value.invoiceDetails).Count > 0)
{
IList objList = (IList)entry.Value.invoiceDetails;
IEnumerable<InvoiceDetails> list = objList.Cast<InvoiceDetails>();
//List<InvoiceDetails> listToIterate = list.ToList();
foreach (var item in list)
{
if (item.invoice_ref != null)
{
UpdateEntry("tbl_ts_InvoiceDetails", "invoice_ref", item.invoice_ref, item.id);
}
if (item.bill_note != null)
{
UpdateEntry("tbl_ts_InvoiceDetails", "bill_note", item.bill_note, item.id);
}
}
}
我已经成功地将“ invoiceDetails”强制转换为IList,但是当我输入foreach时,会抛出错误:
“无法将类型为'Newtonsoft.Json.Linq.JProperty'的对象转换为类型为'TicketSystemDataTransferService.Models.InvoiceDetails'。”
当我尝试执行注释的代码(... = list.ToList())时,我收到相同的错误消息。
您能给我一个建议,如何将invoiceDetails投射到c#列表中,以便使用吗?
答案 0 :(得分:0)
这是使用Newtonsoft的方法:
class Program
{
static void Main(string[] args)
{
Item item = new Item { Name = "Test Item" }; //Create an Item entity
string jsonItem = Newtonsoft.Json.JsonConvert.SerializeObject(item); //Convert given Item to json
Item lastItem = Newtonsoft.Json.JsonConvert.DeserializeObject<Item>(jsonItem); //Convert given json in Item
List<Item> items = new List<Item>()
{
new Item { Name ="Test Item 1" },
new Item { Name ="Test Item 2" },
new Item { Name ="Test Item 3" },
new Item { Name ="Test Item 4" },
new Item { Name ="Test Item 5" }
}; //Create a list of Item
string jsonListItems = Newtonsoft.Json.JsonConvert.SerializeObject(items); //Convert given list of Item to json
List<Item> lastListItems = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Item>>(jsonListItems); //Convert given json in list of Item
}
}
public class Item
{
public string Name { get; set; }
}