Chcę przenieść Business Objects z jednego komputera na inny. Jeśli pomyślę o liczbie około 40 różnych typów obiektów do przeniesienia, użycie wielu kontraktów dla różnych obiektów wydaje się być dość dużym obciążeniem dla zawsze tego samego zadania: "Wyślij obiekt A do komputera B i zapisz obiekt do DB" (obiekty wszystkie mają metodę trwałą).Jak używać zmiennej jako typu
Ponieważ Obiekty mogą mieć wiele różnych rodzajów, chcę tylko, aby użyć metody rodzajowe do:
- serializować obiektu BO
- przenieść ją do innego komputera
- deserializowania go z odpowiedniego typu
- wykonać kontrolę spójności
- Zapisz db
- jest mój problem.
W tej chwili myślę o wysłaniu typu jako informacji eytra. Następnie chcę zrobić coś takiego:
BinaryFormatter aFormatter = new BinaryFormatter();
aFormatter.AssemblyFormat = System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Simple;
Object.ParseTypeFromString(aObjektType) aObject = aFormatter.Deserialize(stream) as Object.ParseTypeFromString(aObjektType);
a potem po prostu użyć metody rodzajowe z obiektu bazowego, aby zapisać obiekt do bazy danych, aby zachować klas transferowych tak proste, jak to możliwe.
Czy istnieje możliwość zrobienia czegoś takiego? Czy też idę w zupełnie niewłaściwym kierunku i łatwiej byłoby osiągnąć to zadanie z innym podejściem?
Tak, co jest następujące: Czy mogę wysłać dodatkowy ciąg znaków, który zawiera nazwę typu, a następnie użyć tej informacji o łańcuchu jako typu obiektu? – Offler
@Offler obiekt już zna jego typ, jeśli używasz 'BinaryFormatter'. W przypadku serializerów takich jak 'XmlSerializer', to nie będzie -' Type.GetType (string) 'jest twoją najlepszą opcją, ale musisz przechowywać' .AssemblyQualifiedName', a nie tylko '.FullName' (inaczej wygrałby nie wiem, do jakiego zespołu się zwrócić). Jednak nie można tego uczynić * zmienną *; to po prostu daje 'Type' do użycia w czasie wykonywania; na przykład 'Type type = GetAndParseTheType(); var ser = new XmlSerializer (type); var obj = ser.Deserialize (stream); ' –
Dobra, trochę się pobawię, żeby zobaczyć, jak to działa. Myślałem, że potrzebuję czegoś takiego jak aObjType = aObj.GetTypeFromName ("ThisisMyType"); MethodInfo aMethod = aObjType.GetMethod ("persist"); aMethod.Invoke (aObj, nowy obiekt [0]); – Offler