2017-02-22 32 views
-1

我試圖將列表轉換爲json字符串。 JSON生成的很好,但是當我嘗試在JSON中生成一個數組時,它將無法正確格式化。產生從列表中將列表轉換爲JSON

List<string> invoicesList = new List<string>(); 

     foreach (var invoice in theInvoices) 
     { 
      invoicesList.Add(invoice.InvoiceNumber); 
      invoicesList.Add(String.Format("{0:c}", invoice.GrandTotal)); 
      invoicesList.Add(FieldTranslation.ToShortDate(invoice.Date.ToString())); 
     } 

我的名單,然後我把它添加到JSON

var info = new MobileAPIHelper.ClientPayrollInfo 
     { 
      GrossWages = String.Format("{0:c}", GrossWages), 
      InvoiceTotal = String.Format("{0:c}", invoiceTotal), 
      InvoiceDate = FieldTranslation.ToShortDate(invoiceDate.ToString()), 
      InvoiceList = invoicesList.ToArray() 

     }; 

輸出最終只是被從列表中

"InvoiceList":["SALES000000000006","$9,300.00","4/11/2016","SALES000000000008","$4,650.00","12/22/2015"] 
長JSON字符串的一切

我無法弄清楚的是如何獲取列表/ json來格式化這樣的invoicelist:

"InvoiceList":[{ 
"SALES000000000006","$9,300.00","4/11/2016" 
},{ 
"SALES000000000008","$4,650.00","12/22/2015" 
}] 
+0

您是否正在使用序列化程序在[這個答案](http://stackoverflow.com/q/6201529/3744182)中描述的之一,或者你想通過字符串格式手動創建JSON? – dbc

+0

@dbc我只是'返回Json(info,JsonRequestBehavior.AllowGet);' – TheDizzle

+0

在這種情況下,我建議你將問題擴展到[mcve]並完全標記([tag:asp.net-mvc]或[標籤:asp.net-web-api]或其他)。 – dbc

回答

1

invoicesList不是包含這些值的對象的列表,它是一個字符串列表。您需要創建一個充當容器的課程

invoice.InvoiceNumber; 
String.Format("{0:c}", invoice.GrandTotal); 
invoice.Date.ToString()); 

這些字段。使invoicesList成爲該類的列表,然後將其解析爲json。你正在添加原始字符串。

1

如果將這些字符串作爲對象。

public class Invoice{ 
public string InvoiceNumber{get;set;} 
public string GrandTotal{get;set;} 
public string Date{get;set;} 
} 


    List<Invoice> invoicesList = new List<Invoice>(); 

    foreach (var invoice in theInvoices) 
    { 
     invoicesList.Add(new Invoice(){InvoiceNumber=invoice.InvoiceNumber,   
       GrandTotal= invoice.GrandTotal, 
      Date=FieldTranslation.ToShortDate(invoice.Date.ToString())}); 
    } 

然後有一個叫NewtonSoftJson包,它允許你從集合轉換。

轉到包管理控制檯(點擊查看視覺工作室 - 菜單>其他窗戶 - >軟件包管理器控制檯)

安裝,包裝Newtonsoft.Json

C#代碼

var invoiceListString = JsonConvert.SerializeObject(invoicesList);

+0

這不會解決他的問題。 (不管他是否已經在使用json.net。) – Dispersia

+0

那麼,應該是使用JsonConvert之前的一個類。 –

+0

新代碼更接近,但您需要更改'清單 invoicesList =新清單();'清單 invoicesList =新清單();' – Dispersia

0

我會推薦使用NewtonSoft.Json。

public class Invoice 
{ 
    public string InvoiceNumber { get; set; } 
    public DateTime InvoiceDate { get; set; } 
    public string InvoiceTotal { get; set; } 
} 

public void PrintJson() 
{ 
    List<Invoice> InvoiceList = new List<Invoice>(); 

    var outputObject = new { InvoiceList }; 

    InvoiceList.Add(new Invoice { InvoiceNumber = "SALES0000001", InvoiceDate = DateTime.UtcNow, InvoiceTotal = String.Format("{0:c}", "90000") }); 
    InvoiceList.Add(new Invoice { InvoiceNumber = "SALES0000002", InvoiceDate = DateTime.UtcNow, InvoiceTotal = String.Format("{0:c}", "60000") }); 

    var output1 = JsonConvert.SerializeObject(outputObject); 
    var output2 = JsonConvert.SerializeObject(InvoiceList); 
} 

輸出1

{"InvoiceList":[{"InvoiceNumber":"SALES0000001","InvoiceDate":"2017-02-22T16:46:31.6933956Z","InvoiceTotal":"90000"},{"InvoiceNumber":"SALES0000002","InvoiceDate":"2017-02-22T16:46:31.6933956Z","InvoiceTotal":"60000"}]}

輸出2

[{"InvoiceNumber":"SALES0000001","InvoiceDate":"2017-02-22T16:46:31.6933956Z","InvoiceTotal":"90000"},{"InvoiceNumber":"SALES0000002","InvoiceDate":"2017-02-22T16:46:31.6933956Z","InvoiceTotal":"60000"}]

請注意JSON的在你的問題是無效的。

0

正如Dispersia指出的那樣,您的列表是一個大的字符串列表,因此,json序列化程序的行爲與請求相同 - 將此大型字符串列表轉換爲一個大的json字符串數組。

我沒有VS手頭測試下面的代碼,但嘗試關閉發票清單成類似:

List<Tuple<String, String, String>> invoiceList = new List<>(); 

,然後添加相應的元組:

foreach (var invoice in theInvoices) 
{ 
    Tuple<String, String, String> t = new Tuple<>(
     invoice.InvoiceNumber, 
     String.Format("{0:c}", invoice.GrandTotal), 
     FieldTranslation.ToShortDate(invoice.Date.ToString())); 
    invoicesList.Add(t); 
} 

但願幫助?