Как я могу получить и разделить часть строки в C #? - PullRequest
0 голосов
/ 11 сентября 2018

Я бы хотел, чтобы каждый <div class="person"> { /*JSON stuff/* } был отдельным элементом в списке объектов.Он смешан с другим HTML-контентом (...html tags...).У меня есть такая строка из HTML-файла:

...html tags...
<div class="person">
{
    "name":"Bob",
    "age":20,
    "color":"blue"
}
</div>
...html tags...
<div class="person">
{
    "name":"John",
    "age":30,
    "color":"green"
}
</div>
...html tags...

Невозможно предсказать, сколько человек будет.Я думаю, что я буду использовать Regex, Json или Substring.Моя проблема в том, что вокруг этих людей есть много другого контента, и я не знаю, что было бы самым простым решением для каждого элемента быть отдельным элементом в списке объектов.

Например, у меня есть класс, подобныйэто:

class Person
{
    public string name {get;set;}
    public int age {get;set;}
}

Я хотел бы загрузить List<Person> список из этого HTML.

1 Ответ

0 голосов
/ 11 сентября 2018

Посмотрите, поможет ли это ...

using System;
using System.Linq;
using System.Text.RegularExpressions;

using Newtonsoft.Json;

namespace ConsoleApp1 {
    class Program {
        static void Main(string[] args) {

            // Just get your input loaded into a variable called input
            var input = @"
                <div class='person'>
                {
                    'name':'Bob',
                    'age':20,
                    'color':'blue'
                }
                </div>
                <div class='dog'>
                {
                    'name':'Jim',
                    'age':30,
                    'color':'green'
                }
                </div>
                <div class='person'>
                {
                    'name':'John',
                    'age':30,
                    'color':'green'
                }
                </div>
            ".Replace("'", "\"");

            Regex personContents = new Regex("<div class=\"person\">(.+?)</div>", RegexOptions.Singleline);
            var persons = personContents.Matches(input).Cast<Match>().Take(6).Select(x => JsonConvert.DeserializeObject<Person>(x.Groups[1].Value.Trim())).ToArray();
            var names = string.Join(",", persons.Select(x => x.name));
            Console.WriteLine($"names={names}");
        }

        class Person {
            public string name { get; set; }
            public int age { get; set; }
            //public string color { get; set; }
        }
    }
}

Приведенный выше код печатает "Боб, Джон". Это не относится к фильтрации дубликатов, но это будет достаточно просто с помощью метода Distinct () LINQ, чтобы получить только уникальные записи.

...