簡體   English   中英

使用 C# 將 json 反序列化為 python 類似字典

[英]Deserialize json into python like Dictionary with C#

我需要使用 .net 核心 3.1 中的System.Text.Json庫以靜態類型語言編寫動態類型系統。 我需要的是將文件反序列化為 Python 之類的字典。 我必須為此使用 C# 因為我們無法讓 python 正確地對我們的系統進行身份驗證。 C# 是我們的默認語言,所以...

在現實世界中,這些文檔位於 CosmosDB 中。 該程序接收一個指向文檔結構中特定字段的配置文件,它必須檢查這些字段,可能更新它們,然后將結果寫回 CosmosDB。 目前,我正在構建一個指向特定領域的系統。 由於系統不知道從宇宙回來的文檔的結構是什么,它不能使用正式的模型。 我目前正在使用測試套件中的 static 文件檢查或更新字段的系統。 完成后我會擔心 cosmos DB。

以這個文件為例:

{
  "azureSql": {
    "databaseName": "ordersdb",
    "tables": [
      {
        "tableName": "mytable",
        "columnNames": [
          "column1",
          "column2"
        ]
      }
    ]
  },
  "cosmosDb": {
    "databaseName": "CosmosDb",
    "collections": [
      {
        "collectionName": "TestCollection",
        "fieldNames": [
          "MyStatus.json.path.to.field"
        ]
      }
    ]
  }
}

像這樣的文件被讀入。輸入幾乎可以是任何類型的合法 json。 我需要將其放入我可以訪問的字典中,類似於 Python mydict["cosmosDb"]["collections"][0]["fieldNames"]

該行:

_entities = JsonSerializer.Deserialize<Dictionary<string, object>>(jsonString);

不起作用,因為它只序列化第一級。 rest 是 json 入口類型。

我發現這個C# 方法來模仿 Python 字典語法

和它的關閉,但它只支持字符串並且在Deserialize方法中不起作用。

關於如何解決這個問題的任何想法?

我建議你使用動態

var entities = JsonSerializer.Deserialize<dynamic>(jsonString)

以下類結構會起作用嗎?

    public class Rootobject
    {
        public Azuresql azureSql { get; set; }
        public Cosmosdb cosmosDb { get; set; }
    }

    public class Azuresql
    {
        public string databaseName { get; set; }
        public List<Table> tables { get; set; }
    }

    public class Table
    {
        public string tableName { get; set; }
        public List<string> columnNames { get; set; }
    }

    public class Cosmosdb
    {
        public string databaseName { get; set; }
        public List<Collection> collections { get; set; }
    }

    public class Collection
    {
        public string collectionName { get; set; }
        public List<string> fieldNames { get; set; }
    }

編輯:這有效:

using Newtonsoft.Json.Linq;

var result = JObject.Parse(jsonFile);
var detail = result["cosmosDb"]["collections"][0]["collectionName"];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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