2015-10-01 92 views
0

我想使用JsonConvert.Serialize將一個c#數組類對象序列化爲一個json非數組對象。如何將c#對象數組序列化爲不帶數組的json對象

公開名單< 僱員> employees;

輸出:

"{\"employees\": 
{\"name\":\"Alex\",\"number\":\"25860340\"}, 
{\"name\":\"Tom\",\"number\":\"94085345\"} 
}" 
+0

結果與JsonConvert.Serialize(員工) 「{\」 員工\ 「:[ {\」 名稱\ 「:\」 亞歷克斯\ 「\ 」號碼\「:\」 25860340 \ 「}, {\」name \「:\」Tom \「,\」number \「:\」94085345 \「} }}」 – sacredMonster

+0

「您期望的是無效的JSON格式。你爲什麼要那樣? – Gildor

回答

1

你已經在你的問題問會不會是有效的JSON,因爲對象是不允許一個跟着一個直接,除非他們是一個數組(見JSON.org)的一部分的格式。但是,只要您有合適的密鑰可供使用,您就可以將您的員工列表轉換爲字典並序列化。一種想法是使用員工號作爲重點,例如:

var employees = new List<Employee> 
{ 
    new Employee { name = "Alex", number = "25860340" }, 
    new Employee { name = "Tom", number = "94085345" } 
}; 

var obj = new 
{ 
    employees = employees.ToDictionary(e => e.number) 
}; 

string json = JsonConvert.SerializeObject(obj, Formatting.Indented); 
Console.WriteLine(json); 

這將使你這個輸出,這是接近你想要的東西:

{ 
    "employees": { 
    "25860340": { 
     "name": "Alex", 
     "number": "25860340" 
    }, 
    "94085345": { 
     "name": "Tom", 
     "number": "94085345" 
    } 
    } 
} 

如果員工數量ISN 「T實際上獨一無二的,你也可以使用列表中的每個員工的職位作爲這樣一個關鍵:

int i = 0; 
var obj = new 
{ 
    employees = employees.ToDictionary(e => i++) 
}; 

這會爲您提供以下輸出,而不是:

{ 
    "employees": { 
    "0": { 
     "name": "Alex", 
     "number": "25860340" 
    }, 
    "1": { 
     "name": "Tom", 
     "number": "94085345" 
    } 
    } 
} 
相關問題