简体   繁体   中英

I want to read string and insert in model list in Nested format in c#?

I want to read a below string and save that in model list in nested format in 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, "\r\n\\s*");
        var items = Regex.Split(source, "\r\n\\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; }
}

Expected Result :

I want to insert data in list but after the main header in the string the inner text should insert in the nested list and so on.

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

Like this I want to create a list and insert the string.

Your question is a bit unclear to me so I figured it out that you have a text like this:

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";

Note: the closed string is the key!

In this situation I can suggest you to convert you string to XML like this:

var lines = Regex.Split(str, @"[\r\n]+\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>\r\n"
            : $"<Header Name=\"{items[1]}\">\r\n");
    }
    else
    {
        sb.Append($"<InnerText>{items[0]}</InnerText>\r\n");
    }
}

var xml = XDocument.Parse(sb.ToString());

Now you have a serializable object - XML document instead of raw string -.
Now you have many options to change your XML and change it back to string and so on.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM