簡體   English   中英

如何從包含此字符串的 object 中提取字符串?

[英]How can I extract a string out of an object that contains this string?

我創建了一個看起來像這樣的 Yaml:

Directories:
    - ./Libraries:
        - DLLList.yml

    - ./Output:
        - None

現在我將 yaml 反序列化為對象列表:

List<object> allDirectoriesList = new List<object>();
List<string> allFileNames = new List<string>();

using (var reader = new StringReader(File.ReadAllText("./FileConfig.yml")))
{
    allDirectoriesList = deserializer.Deserialize<dynamic>(reader)["Directories"] as List<Object>;
}

foreach (var directory in allDirectoriesList)
{
    var directoryAsDictionary = (Dictionary<object, object>)directory;
    List<object> list = directoryAsDictionary.Select(kvp => kvp.Value).ToList();

    IEnumerable<string> _fileList = list.Select(i => i.ToString());

    List<string> fileList = _fileList.ToList<string>();

    for (int i = 0; i < fileList.Count(); i++)
    {
        var x = (string)list[i];
    }
}

directory是一個字典類型的 object,我在這部分將其轉換為列表:

var directoryAsDictionary = (Dictionary<object, object>)directory;
List<object> list = directoryAsDictionary.Select(kvp => kvp.Value).ToList(); 

list包含 1 個字符串類型的 object,其中存儲了文件名。 但我無法將這些字符串從對象中取出。 如果我將它們轉換或轉換為 ToString(),我總是得到"System.Collections.Generic.List`1[System.Object]" ,但在這種情況下它必須是"DLLList.yml"

假設您使用的是YamlDotNet

        List<object> allDirectoriesList = new List<object>();

        using (var reader = new StringReader(File.ReadAllText("./FileConfig.yml")))
        {
            allDirectoriesList = new DeserializerBuilder().Build().Deserialize<dynamic>(reader)["Directories"] as List<object>;
        }

        foreach (var directory in allDirectoriesList)
        {
            var directoryAsDictionary = (Dictionary<object, object>)directory;
            List<object> list = directoryAsDictionary.SelectMany(kvp => (List<object>)kvp.Value).ToList();

            List<string> _fileList = list.Select(Convert.ToString).ToList();

            foreach(var file in _fileList)
                Console.WriteLine($"Item: {file} found in {Convert.ToString(directoryAsDictionary.Keys.First())}");
        }

基本上,您試圖將字典值轉換為字符串,但它是一個列表。 通過使用SelectMany ,它可以將所有列表扁平化為一個並使用它。 有一些多余的演員表,我也刪除了。 為了將來參考,嘗試使您的結構盡可能簡單並將它們反序列化為結構/類 - 您會發現這樣更容易。

暫無
暫無

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

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