Wpis z mikrobloga

hej,

mam taki problem. Przyjmijmy taką konfigurację programu:

public class Configuration
{
public string sciezka {get; set;}
public int liczba {get; set;}
public List lista {get; set;}
}

oraz taki plik XML, który ma powyższą konfigurację wypełniać wartościami:

xml version="1.0"?
I teraz, używając refleksji chciałbym auto magicznie przypisać wartości z pliku xml do wartości w klasie.

private void ProcessingAppConfig()
{
var configuration = new Configuration();

var appConfig = (NameValueCollection)ConfigurationManager.GetSection("AppSettings");
foreach (var key in appConfig.AllKeys)
{
SetAppConfigPropertyValue(configuration, key, appConfig[key]);
}
}

private void SetAppConfigPropertyValue(object configuration, string name, string value)
{
var type = configuration.GetType();
var property = type.GetProperty(name, BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public);
if (property == null)
{
Console.ReadKey();
return;
}

property.SetValue(type, value);
}

I mam taki problem, że type.GetProperty() - działa dla string i int ( innych typów), ale dla List zwraca null. Co robię źle :> ?

#csharp #programowanie
  • 13
@Talarkowy jak chcesz się uczyć refleksji to znajdź jakiś sensowny przykład, a nie ten totalnie z dupy :|
A problem jest taki, że c# nie ma pojęcia jak zdeserializować "aa, bb, cc" do listy. Tobie się wydaje oczywiste, że wartości są oddzielone spacja i przecinkiem, ale skąd komputer ma to wiedzieć?
@Yahoo_: wiem C# automagicznie nie zdeserializuje "aa, bb, cc" do listy - ale nie tego dotyczy moje pytanie :)

Pytam, dlaczego 'type.GetProperty(lista)' zwraca null :) gdzie dla innych właściwości - działa poprawnie.
@Talarkowy: Na to pytanie ci nie odpowiem, moze po prostu nie potrafi jej rozpoznac w xmlu i tyle. A co do tego co robisz to serio IO jest wolne refleksja podobnie, nie łącz tego bo to bardzo zly pomysł xd Pocwicz refklesje na wappowaniu jakiś dllek w cpp czy cos.