Есть ли способ загрузить данные объекта в void Load (), не назначая каждое свойство отдельно (C #)? - PullRequest
0 голосов
/ 24 марта 2019

Я работаю над небольшим приложением WPF, чтобы помочь мне с организацией файлов. Класс, в котором я храню большую часть своих данных, - это Project, и он содержит большую часть данных, которые использует приложение. Таким образом, он имеет много свойств, которые мне нужно сохранить и загрузить из файла (около 20, используя несколько примеров)

public DateTime Start { get; set; }
public DateTime End { get; set; }
public Int32 Count { get; set; }
public String Name { get; set; }
public HashSet<String> Files { get; set; }

Насколько я знаю, загрузка объекта может быть осуществлена ​​двумя основными способами:

I.

Project.cs

public Project Load( String file ) {
    Project project = json( file );    //to shorten the question
    return project;
}

MainWindow

Project project = new Project();
project = project.Load( file );

II.

Project.cs

public void Load( String file ) {
    Project project = json( file );    

    Start = project.Start;
    End = project.End;
    Count = project.Count;
    Name = project.Name;
    Files = project.Files;
}

MainWindow

Project project = new Project();
project.Load( file );

Можно ли как-нибудь еще использовать функцию void Load(), но назначить весь объект сразу?

Я пытался использовать this = project;, но он доступен только для чтения.

1 Ответ

0 голосов
/ 24 марта 2019

Json .net имеет метод ,

Быстрый и грязный способ сделать это с помощью отражения

 var project = Json(file);    //to shorten the question

            foreach (var prop in this.GetType().GetProperties())
            {
                prop.SetValue(this, prop.GetValue(project));
            }

            return project;

Более эффективный способ с использованием компиляции, этот более продвинутый,Но в целом это выглядит несколько неправильно, когда вы используете wpf, вы должны использовать какой-то шаблон MVVM, и проект должен быть связующим контекстом вашего представления, и вы можете установить созданный объект из json без создания копии объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...