如何将json字符串反序列化为c#dot中的对象列表

G. *_*ain 13 .net c# json desktop-application

我正在使用以下JSON字符串

{
"transactions": 
[
   {
    "paymentcharge":"0.0",
    "amount":352,
    "id":13418,
    "shippingcharge":35,
    "shippingtype":2,
    "status":2,
    "paymenttype":1,
    "date":"2012-10-06 16:15:28.0"
   },   
   {
    "paymentcharge":"0.0",
    "amount":42455,
    "id":16305,
    "shippingcharge":0,
    "shippingtype":2,
    "status":2,
    "paymenttype":2,
    "date":"2012-11-30 09:29:29.0"
   },   
   {
    "paymentcharge":"1.0",
    "amount":42456,
    "id":16305,
    "shippingcharge":0,
    "shippingtype":2,
    "status":2,
    "paymenttype":2,
    "date":"2012-11-30 09:29:29.0"
   }
],
"count":3
}
Run Code Online (Sandbox Code Playgroud)

我有一个类结构如下解析和感受json数据

class clsSalesTran
{
    public double paymentcharge { get; set; }
    public double amount { get; set; }
    public long id { get; set; }
    public int shippingcharge { get; set; }
    public int shippingtype { get; set; }
    public int status { get; set; }
    public int paymenttype { get; set; }
    public DateTime date { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如何将上面的JSON字符串反序列化为List?

我正在使用Newtonsoft.Json进行反序列化.

Sat*_*pal 18

首先创建另一个类:

public class SalesTransactions
{
     public List<clsSalesTran> transactions {get;set;}
     public int count{get;set;}
}
Run Code Online (Sandbox Code Playgroud)

然后使用,

JsonConvert.DeserializeObject<SalesTransactions>(inputString)
Run Code Online (Sandbox Code Playgroud)

  • count 属性有必要吗?以我的经验来看并非如此。 (2认同)
  • 是的,但如果我问这个问题,我会认为你的答案只会给出所需的内容,仅此而已。正如我们所知,省略不必要的代码是一种很好的做法。FWIW 我对你的问题投了赞成票,但为可能想知道同样问题的后续访客留下了评论。 (2认同)

And*_*rew 8

要将字符串反序列化为List类型的对象clsSalesTran

var myList = JsonConvert.DeserializeObject<List<clsSalesTran>>(inputString);
Run Code Online (Sandbox Code Playgroud)

  • 注意:这不适用于原始问题中的 JSON。仅当在“inputString”中解析的整个 JSON 只是一个未命名数组时,这才有效。 (2认同)

小智 7

创建如下所示的类
通过创建类'clsSalesTran'的列表和'Count'的变量

注意:JsonProperty是Json String的必需项

public class SalesTransactions
{
     [JsonProperty("transactions")]
     public List<clsSalesTran> transactions {get;set;}
     public int count{get;set;}
}
Run Code Online (Sandbox Code Playgroud)

然后您可以使用下面的这个类来反序列化

SalesTransactions st = JsonConvert.DeserializeObject<SalesTransactions>(inputString)
Run Code Online (Sandbox Code Playgroud)

使用反序列化对象,如下所示

double paymentcharge = st.transactions[0].paymentcharge;
Run Code Online (Sandbox Code Playgroud)