C# XmlSerializer BindingFailure

Dostaję BindingFailure na linii kodu za pomocą XmlSerializer:

XmlSerializer s = new XmlSerializer(typeof(CustomXMLSerializeObject));

Zespół o nazwie display CustomXMLSerializeObject.XmlSerializers 'nie udało się załadować w kontekście wiążącym 'LoadFrom' AppDomain o ID 1. Przyczyną błędu było: System.IO.FileNotFoundException: Could not load file or assembly XMLSerializeObject.XmlSerializers, Version=1.4.0.0, Culture=neutral, PublicKeyToken=null' lub jedna z jego zależności. System nie może znaleźć pliku określone.

Błąd jest dość długi i wyjaśnia informacje o stanie pre-bind i miejscach, w których szukał, aby spróbować znaleźć plik.

Niestandardowy obiekt, który próbuję desrializować, jest stosunkowo prosty - tylko kilka prywatnych liczb całkowitych i łańcuchów, które mają publiczne Accesory. Mam prywatną zmienną, która jest kolejną niestandardową klasą serializowalną, ale ta ma tylko prywatne Ciągi z publicznymi accesorami.

Ta niezręczna część? To się zdarza tylko kiedy deserializuję. Ta linia kodu działa dobrze, gdy porządkuję obiekt. Działa dobrze, a obiekt zostaje deserializowany i idealnie wypełniony. Tak naprawdę nie zauważasz żadnej utraty wydajności lub długiego czasu ładowania.

Czym dokładnie jest to Ostrzeżenie (Nie błąd lub wyjątek, program działa dobrze później)? Dlaczego tak się dzieje? Jak Mogę temu zapobiec bez wyłączania Ostrzeżenia?

Author: Steve H., 2010-02-05

4 answers

Zgodnie z dziwny błąd XmlSerializer :

Ten wyjątek jest częścią Normalne działanie xmlserializera. Informatyka oczekuje się i zostanie złapany i obsługiwane wewnątrz kodu frameworka. Zignoruj to i kontynuuj. Jeśli to przeszkadza podczas debugowania, Ustaw Debugger Visual Studio, aby zatrzymać się tylko na nieobsługiwane wyjątki zamiast wszystkich wyjątki.

To prawdopodobnie spowodowane na podstawie wyjątków, które wybierasz do monitor.

Czy możesz mi powiedzieć jak skonfigurować wyjątki: Debug - > wyjątki

Jeśli odznaczysz pole wyboru "rzucony" dla BindingFailure pod Managed Debugging Assistants, wyjątek powinien zniknąć. Lub jeśli nie chcesz tego robić, możesz po prostu kontynuować, ponieważ ten wyjątek jest według projektu

 54
Author: SwDevMan81,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-05 19:49:06

Użyj następującej metody, aby skonstruować instancję xmlSerializer, która rozwiąże problem:

XmlSerializer s = XmlSerializer.FromTypes(new[] { typeof(CustomXMLSerializeObject) })[0];

Następnie nie musisz wyłączać obsługi wyjątków.

 39
Author: Lin Song Yang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-05 02:24:06

Zgodnie z ms VS 2010 Feedback tak został zaprojektowany. Aby zapobiec temu wyjątkowi i zapobiec spowolnieniu w czasie wykonywania, musisz wygenerować zespół Serializera XML.

Są trzy narzędzia, które mogę znaleźć: Microsoft SGen, Xgenplus i Mvp.Xml.XGen . Od tego postu niestety żadna z nich nie została zaktualizowana od 2007 roku.

 4
Author: Lucas B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-31 18:20:38

W porządku, znalazłem rozwiązanie. Nigdy nie mogłem zaakceptować wyłączenia WYJĄTKÓW jako odpowiedzi. Wydaje się to w jakiś sposób złe....

Wydaje się, że dzieje się to w poprzednich złożeniach lub poprzednich wersjach Twojego obecnego złożenia, pewne odniesienia były używane zewnętrznie. Mimo, że Twój kod mógł już dawno porzucić te odniesienia, nazwy nadal są, jakieś tajemnicze gdzieś, szukane w Zgromadzeniu.

Przejdź do swojego AssemblyInfo.pliki cs i znajdź ThemeInfo:

[assembly: ThemeInfo(
ResourceDictionaryLocation.ExternalAssembly, //where theme specific resource dictionaries are located
//(used if a resource is not found in the page, 
// or application resource dictionaries)
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
//(used if a resource is not found in the page, 
// app, or any theme specific resource dictionaries))]

Zmień pierwszą lokalizację na "brak":

[assembly: ThemeInfo(
ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
//(used if a resource is not found in the page, 
// or application resource dictionaries)
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
//(used if a resource is not found in the page, 
// app, or any theme specific resource dictionaries))]

I nie wyłączaj WYJĄTKÓW! Będę zamieszczać tę odpowiedź na różne pytania o podobnym charakterze.

 0
Author: ouflak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-31 17:11:42