我想读取字符串并以 c# 的嵌套格式插入模型列表



我想读取下面的字符串并将其保存在 C# 中的嵌套格式的模型列表中?

string = 
        main header
          inner text
          inner text    
          Inner header
             inner text
             inner text
             Inner Header
             closed header
          closed header
         inner text

        var str2 = Regex.Split(source, "rn\s*");
        var items = Regex.Split(source, "rn\s*").Select(x => x.Split(new[] { ':' }));    
        List<NestedTaskModel2> lstNestTaskModel2 = new List<NestedTaskModel2>();
        bool flag = true;
        foreach (var item in items)
        {
            NestedTaskModel2 objNestedTaskModel2 = new NestedTaskModel2();
            if ((item[0].Trim() == "~Header~") && (flag))
            {
                objTaskModel.MainHeader = item[1].Trim();
                flag = false;
            }
            else if (item.Length == 1)
            {
                objNestedTaskModel2.InnerText = item[0].Trim();
            }
            else if ((item.Length <= 2) && (item[0].Trim() == "~Header~"))
            {
                objNestedTaskModel2.InnerHeader = item[1].Trim();
            }
            lstNestTaskModel2.Add(objNestedTaskModel2);
        }
        objTaskModel.LstNestedTaskModel2 = lstNestTaskModel2;
    }
}
public class TaskModel
{
    public string MainHeader { get; set; }
    public List<NestedTaskModel2> LstNestedTaskModel2 { get; set; }
}
public class NestedTaskModel2
{
    public string InnerText { get; set; }
    public string InnerHeader { get; set; }
}

预期成果 :

我想在列表中插入数据,但在字符串的主标题之后,内部文本应该插入嵌套列表,依此类推。

main header -- object
     Inner Text -- Nested List
     Inner Text -- Nested List
     Inner Header -- Nested List
           Inner Text -- Nested Nested List
           Inner Text --- Nested Nested List
           Inner Header -- Nested Nested List
                 Inner Text -- Again Nested List

像这样,我想创建一个列表并插入字符串。

你的问题对我来说有点不清楚,所以我想出你有这样的文本:

var str = @"~Header~:main header
    inner text 1
    inner text 2   
    ~Header~:Inner header
        inner inner text 1
        inner inner text 2
        ~Header~: Inner inner Header
        ~Header~: closed Inner inner Header
    ~Header~:closed Inner header
    inner text
~Header~: closed main header";

注意:closed字符串是关键!

在这种情况下,我可以建议您将字符串转换为XML,如下所示:

var lines = Regex.Split(str, @"[rn]+s*")
    .Select(l => l.Trim().Split(':').Select(w => w.Trim()).ToArray());
var sb = new StringBuilder();
foreach (var items in lines)
{
    if (items[0] == "~Header~")
    {
        sb.Append(items[1].StartsWith("closed", StringComparison.InvariantCultureIgnoreCase)
            ? "</Header>rn"
            : $"<Header Name="{items[1]}">rn");
    }
    else
    {
        sb.Append($"<InnerText>{items[0]}</InnerText>rn");
    }
}
var xml = XDocument.Parse(sb.ToString());

现在您有一个可序列化的对象 - XML 文档而不是原始字符串。
现在,您有很多选项可以更改 XML 并将其更改回字符串等。

最新更新