[英]Converting dictionary to Json?
我正在嘗試將字典轉換為JSON。 我有一個客戶端服務器應用程序集,正在嘗試在服務器端創建一個傳出數據包,但是該數據包的數據在字典中。
我的字典結構設置如下。
"device.name" => "Machine-39FK394S"
"device.username" => "admin"
"device.operating_system" => "Windows 10"
"something.else" => 294
點表示JSON中的另一個級別,JSON中的輸出將是這樣。
{
"device" : {
"name" : "Machine-39FK394S",
"username" : "admin",
"operating_system" : "Windows 10",
}
"something" : {
"else" : 294,
}
}
到目前為止,我嘗試了什么?
public string GetJson()
{
var entries = _packetData.Select(d => string.Format("\"{0}\": [{1}]", d.Key, string.Join(",", d.Value)));
return "{" + string.Join(",", entries) + "}";
}
盡管上述方法僅輸出一個空的{}
json字符串。
這樣的事情怎么樣,它應該適用於許多屬性:
var inputDict = new Dictionary<string, object>();
inputDict["device.name"] = "Machine-39FK394S";
inputDict["device.username"] = "admin";
inputDict["device.operating_system"] = "Windows 10";
inputDict["something.else"] = 294;
var outputObject = new Dictionary<string, object>();
foreach (var kvp in inputDict)
{
var currentDict = outputObject;
var depth = 0;
var fields = kvp.Key.Split('.');
foreach (var field in fields)
{
if (++depth == fields.Length)
{
currentDict[field] = kvp.Value;
}
else if (!currentDict.ContainsKey(field))
{
currentDict[field] = new Dictionary<string, object>();
}
currentDict = currentDict[field] as Dictionary<string, object>;
}
}
var json = JsonConvert.SerializeObject(outputObject, Formatting.Indented);
Console.WriteLine("JSON: " + json);
我得到以下輸出:
{
"device": {
"name": "Machine-39FK394S",
"username": "admin",
"operating_system": "Windows 10"
},
"something": {
"else": 294
}
}
它使用Newtonsoft Json.Net,但是我確實相信如果沒有這樣的庫,就很難組成這個JSON。 Json.Net將處理各種類型的對象到字符串的所有轉換,此外還將處理轉義的JSON分隔符。 自己編寫這種類型的代碼會很討厭。 另外,它是高度可定制的,並將允許更改日期時間格式等。
您可能需要進行一些改進以處理NULL等。
如果您希望避免使用Json.Net,則可以添加對System.Web.Extensions的引用,如下所示:
using System.Web.Script.Serialization;
JavaScriptSerializer js = new JavaScriptSerializer();
string json = js.Serialize(outputObject);
您可以使用NuGet的Newtonsoft.Json來做到這一點。 即:
var data = new
{
device = new
{
name = "Machine-39FK394S",
username = "admin",
operating_system = "Windows 10"
},
something = new {_else=294}
};
var json = JsonConvert.SerializeObject(data, Newtonsoft.Json.Formatting.Indented);
Console.WriteLine(json);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.