2016-06-21 3 views
1

У меня есть класс с 60 различными строками. Мне нужно получить строки из API, где у них есть одно имя, сохранить их и затем вставить в базу данных, где у них есть другое имя.C# опрятный способ задать длинный список значений класса?

Так что мой код в настоящее время 60 строк кода, который выглядит, как этот

var data = (from l in resultsxml.Root.Descendants(ns + "contacts").Elements(ns + "contact") 
select new contact { 
id        = (string)l.Element("id").Value, 
surname       = (string)l.Element("lastName").Value, 
companyName      = (string)l.Element("organisationName").Value, 
... 

, а затем еще 60 линий как этот

cmd.Parameters(new SqlParameter("@LastName", i.surname)); 
cmd.Parameters(new SqlParameter("@DivisionName", i.companyName)); 
... 

Как и объявление класса.

Есть ли более аккуратный способ написать это, чтобы я мог пройти через 60 строк и сохранить информацию о названии в классе?

+0

Нехорошо ли было бы передавать 'Xml' в качестве параметра и выполнять сопоставление (логику) в базе данных? –

ответ

0

Вы можете использовать класс атрибута:

public class ElementAndParamNameAttribute : Attribute 
{ 
    public string Element {get;set;} 
    public string Param {get;set;} 
} 
. 
. 
. 
public class contact 
{ 
    [ElementAndParamNameAttribute(Element="lastName",Param="@lastName")] 
    public string surname {get;set;} 
    . 
    . 
    . 
} 

И затем петлю через свойство contact с помощью typeof(contact).GetProperties(), найти атрибут с помощью PropertyInfo.GetCustomAttributes(), установите значение с помощью PropertyInfo.GetValue() затем получить значение с помощью PropertyInfo.SetValue().