толковый словарьдля объекта - PullRequest
0 голосов
/ 30 декабря 2011

Как лучше всего преобразовать этот словарь:

Dictionary<string, object> person = new Dictionary<string, object>();
                            person.Add("ID", 1);
                            person.Add("Name", "Alex");

в объект:

public class Person
{
public int ID{get;set;}
public string Name{get;set;}
}

?

Ответы [ 4 ]

4 голосов
/ 30 декабря 2011

Вот мое предложение:

var newPerson = new Person 
    { 
        ID = (int)person["ID"],
        Name = person["Name"].ToString()
    };

Это не обрабатывает ошибок и предполагает, что поля существуют в словаре и заполнены действительными значениями!

2 голосов
/ 30 декабря 2011

Если вы хотите сделать это для любого объекта в целом, вы можете использовать отражение.Предполагая, что значения в словаре соответствуют типу и не требуют преобразования:

static T GetObject<T>(Dictionary<string, object> dict)
    where T : new()
{
    var obj = new T();
    foreach (var property in typeof(T).GetProperties())
    {
        var args = new object[1];
        var setter = property.GetSetMethod(); // property has a public setter
        if (setter != null && dict.TryGetValue(property.Name, out args[0]))
            setter.Invoke(obj, args);
    }
    return obj;
}

Затем использовать его:

var alexDict = new Dictionary<string, object>
{
    { "ID", 1 },
    { "Name", "Alex" },
};
var alexPerson = GetObject<Person>(alexDict);
0 голосов
/ 30 декабря 2011

Простой способ:

var person = new Person
{
    Id = (int)dict["ID"],
    Name = (string)dict["Name"]
}

Общий способ: используйте отражение.

0 голосов
/ 30 декабря 2011
Person myPerson = new Person();
myPerson.ID = (int)person["ID"];
myPerson.Name = (string)person["Name"];

Не обеспечивает проверки ошибок с помощью приведения типа int.

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