将Json字符串转换为C#对象

3

我正在尝试将Json字符串解析为C#类对象。我在C#中有三个类,从服务获取Json字符串,我正在编写代码将此Json字符串存储到Sql表中。我遇到了一个问题,无法将Json字符串解析为多个C#类。我使用Newtonsoft.Json来解析。

以下是我得到的Json字符串:

{
    "receipt_cr": {
        "VchNo": [
            "CR::00001",
            "CR::00002",
            "CR::00003",
            "CR::00004",
            "CR::00005"
        ],
        "VoucherName": [
            "Receipt",
            "Receipt",
            "Receipt",
            "Receipt",
            "Receipt"
        ],
        "VchDate": [
            "2013-04-02 00:00:00",
            "2013-04-02 00:00:00",
            "2013-04-02 00:00:00",
            "2013-04-02 00:00:00",
            "2013-04-02 00:00:00"
        ],
        "LedgerName": [
            "xxxxxx",
            "yyyyy",
            "ssssss",
            "rrrrrrr",
            "wwwwwww"
        ],
        "UnderGroup": [
            "Sundry Debtors",
            "Sundry Debtors",
            "Sundry Debtors",
            "Sundry Debtors",
            "Sundry Debtors"
        ],
        "AgnstRefNumber": [
            "",
            "",
            "",
            "",
            ""
        ],
        "NetAmount": [
            "2973500.00",
            "2973500.00",
            "5967015.00",
            "8968432.00",
            "5980000.00"
        ],
        "AgnstReferenceAmount": [
            "",
            "",
            "",
            "",
            ""
        ],
        "CostCentreName": [
            "",
            "",
            "",
            "",
            ""
        ],
        "CostCategory": [
            "",
            "",
            "",
            "",
            ""
        ],
        "Status ": [
            "NI",
            "NI",
            "NI",
            "NI",
            "NI"
        ]
    },
    "receipt_dr": {
        "VchNo": [
            "CR::00001",
            "CR::00002",
            "CR::00003",
            "CR::00004",
            "CR::00004"
        ],
        "VoucherName": [
            "Receipt",
            "Receipt",
            "Receipt",
            "Receipt",
            "Receipt"
        ],
        "VchDate": [
            "2013-04-02 00:00:00",
            "2013-04-02 00:00:00",
            "2013-04-02 00:00:00",
            "2013-04-02 00:00:00",
            "2013-04-02 00:00:00"
        ],
        "CashBankLedger": [
            "Bank",
            "Bank",
            "Bank",
            "Bank",
            "Bank"
        ],
        "UnderGroup": [
            "BankAccount",
            "BankAccount",
            "BankAccount",
            "BankAccount",
            "BankAccount"
        ],
        "Amount": [
            "2973500.00",
            "2973500.00",
            "5967015.00",
            "2989477.00",
            "2989477.00"
        ],
        "TransactionType": [
            "cheque",
            "RTGS",
            "cheque",
            "cheque",
            "cheque"
        ],
        "InstrumentNo": [
            "1",
            "2",
            "3",
            "4",
            "5"
        ],
        "Date": [
            "2013-04-02 00:00:00",
            "2013-04-02 00:00:00",
            "2013-04-02 00:00:00",
            "2013-04-02 00:00:00",
            "2013-04-02 00:00:00"
        ],
        "BankName": [
            "Axis - 230",
            "Axis - 230",
            "Axis - 230",
            "Axis - 230",
            "Axis - 230"
        ],
        "BankBranch": [
            "Avinashi Road",
            "Avinashi Road",
            "Avinashi Road",
            "Avinashi Road",
            "Avinashi Road"
        ],
        "BankDate": [
            "2013-04-02 00:00:00",
            "2013-04-02 00:00:00",
            "2013-04-02 00:00:00",
            "2013-04-02 00:00:00",
            "2013-04-02 00:00:00"
        ],
        "Narration": [
            "",
            "",
            "",
            "",
            ""
        ]
    },
    "payment_dr": {
        "VchNo": [
            "SP::00001",
            "SP::00002",
            "SP::00003",
            "SP::00004",
            "SP::00005"
        ],
        "VoucherName": [
            "Payment",
            "Payment",
            "Payment",
            "Payment",
            "Payment"
        ],
        "VchDate": [
            "2013-04-02 13:49:00",
            "2013-04-02 13:53:00",
            "2013-04-02 13:54:00",
            "2013-04-02 13:55:00",
            "2013-04-02 13:55:00"
        ],
        "LedgerName": [
            "shruthi jewel city",
            "TRUST TECHONOLOGIES",
            "RKR Gold Pvt Ltd",
            "Bank of Nova Scotia",
            "Bank of Nova Scotia"
        ],
        "UnderGroup": [
            "SundryCredit",
            "SundryCredit",
            "SundryCredit",
            "SundryCredit",
            "SundryCredit"
        ],
        "NetAmount": [
            "8977387",
            "1000",
            "14915000",
            "14700000",
            "27700000"
        ],
        "AgnstRefNumber ": [
            "",
            "",
            "",
            "",
            ""
        ],
        "AgnstReferenceAmount ": [
            "",
            "",
            "",
            "",
            ""
        ],
        "CostCentreName ": [
            "",
            "",
            "",
            "",
            ""
        ],
        "CostCategory ": [
            "",
            "",
            "",
            "",
            ""
        ],
        "Status ": [
            "NI",
            "NI",
            "NI",
            "NI",
            "NI"
        ]
    }

}

我正在学习C#课程,代码如下:

 public class ReceiptCr
    {
        public String VchNo { get; set; }
        public String VoucherName { get; set; }
        public DateTime VchDate { get; set; }
        public String LedgerName { get; set; }
        public String UnderGroup { get; set; }
        public Decimal NetAmount { get; set; }
        public String AgnstRefNumber { get; set; }
        public Decimal AgnstReferenceAmount { get; set; }
        public String CostCentreName { get; set; }
        public String CostCategory { get; set; }
        public String Status { get; set; }
    }
public class ReceiptDr
    {
        public String VchNo { get; set; }
        public String VoucherName { get; set; }
        public DateTime VchDate { get; set; }
        public String CashOrBankLedger { get; set; }
        public String UnderGroup { get; set; }
        public Decimal Amount { get; set; }
        public String TransactionType { get; set; }
        public String InstrumentNo { get; set; }
        public DateTime BankDate { get; set; }
        public String BankName { get; set; }
        public String BankBranch { get; set; }
        public String Narration { get; set; }
    }
 public class PaymentDr
    {
        public String VchNo { get; set; }
        public String VoucherName { get; set; }
        public DateTime VchDate { get; set; }
        public String LedgerName { get; set; }
        public String UnderGroup { get; set; }
        public Decimal NetAmount { get; set; }
        public String AgnstRefNumber { get; set; }
        public Decimal AgnstReferenceAmount { get; set; }
        public String CostCentreName { get; set; }
        public String CostCategory { get; set; }
        public String Status { get; set; }
    }

如何在C#中将此JSON字符串解析为这三个类?

这篇文章可能对你有所帮助:http://msdn.microsoft.com/en-AU/library/bb412179.aspx - bazz
什么是将Json字符串解析为对象的最简单的C#函数?json2csharp - Paritosh
2个回答

9
以下结构可供参考:

下面的结构应该能让你开始:

public class ReceiptCR
{
    public string[] VchNo { get; set; }
    public string[] VoucherName { get; set; }
    public string[] VchDate { get; set; }
    ...
}

public class ReceiptDR
{
    public string[] VchNo { get; set; }
    public string[] VoucherName { get; set; }
    public string[] VchDate { get; set; }
    ...
}

public class PaymentDR 
{
    public string[] VchNo { get; set; }
    public string[] VoucherName { get; set; }
    public string[] VchDate { get; set; }
    ...
}

然后定义包装器:

public class Root
{
    public ReceiptCR Receipt_cr { get; set; }
    public ReceiptDR Receipt_dr { get; set; }
    public PaymentDR Payment_dr { get; set; }
}

您可以从json字符串反序列化:

string json = ...
Root result = JsonConvert.DeserializeObject<Root>(json);

非常感谢,你节省了我的时间。这真的帮助了很多工作。它按照我期望的方式运行良好。 - Vinoth Kumar

1
根据你的.NET版本不同,你可以利用JavaScriptSerializer。如果稍微修改一下你的类。
public class ReceiptContainer
{
    public ReceiptCr receipt_cr;
    public ReceiptDr receipt_dr;
    public PaymentDr payment_dr;

    public ReceiptContainer() 
    {
        receipt_cr = new ReceiptCr();
        receipt_dr = new ReceiptDr();
        payment_dr = new PaymentDr();
    }

    public class ReceiptCr
    {
        public String[] VchNo { get; set; }
        public String[] VoucherName { get; set; }
        public DateTime[] VchDate { get; set; }
        public String[] LedgerName { get; set; }
        public String[] UnderGroup { get; set; }
        public Decimal[] NetAmount { get; set; }
        public String[] AgnstRefNumber { get; set; }
        public Decimal[] AgnstReferenceAmount { get; set; }
        public String[] CostCentreName { get; set; }
        public String[] CostCategory { get; set; }
        public String[] Status { get; set; }
        public ReceiptCr() { }
    }
    public class ReceiptDr
    {
        public String[] VchNo { get; set; }
        public String[] VoucherName { get; set; }
        public DateTime[] VchDate { get; set; }
        public String[] CashOrBankLedger { get; set; }
        public String[] UnderGroup { get; set; }
        public Decimal[] Amount { get; set; }
        public String[] TransactionType { get; set; }
        public String[] InstrumentNo { get; set; }
        public DateTime[] BankDate { get; set; }
        public String[] BankName { get; set; }
        public String[] BankBranch { get; set; }
        public String[] Narration { get; set; }
        public ReceiptDr() { }
    }
    public class PaymentDr
    {
        public String[] VchNo { get; set; }
        public String[] VoucherName { get; set; }
        public DateTime[] VchDate { get; set; }
        public String[] LedgerName { get; set; }
        public String[] UnderGroup { get; set; }
        public Decimal[] NetAmount { get; set; }
        public String[] AgnstRefNumber { get; set; }
        public Decimal[] AgnstReferenceAmount { get; set; }
        public String[] CostCentreName { get; set; }
        public String[] CostCategory { get; set; }
        public String[] Status { get; set; }
        public PaymentDr() { }
    }
}

根据您使用的 .NET 版本,您可以使用以下方式进行设置

ReceiptContainer receipts = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<ReceiptContainer>(yourJsonString);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接