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.