簡體   English   中英

將字典轉換為Json?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM