Changeset 2766


Ignore:
Timestamp:
Feb 21, 2011, 8:25:40 PM (11 years ago)
Author:
kopal
Message:

some fixes in XMLSerialization so that 'internal' marked classes, properties and so on will be deserialized too

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/WorkspaceManagerModel/Model/Tools/XMLSerialization.cs

    r2747 r2766  
    2828using System.Windows;
    2929using System.Globalization;
     30using System.Runtime.CompilerServices;
     31[assembly: InternalsVisibleTo("System.Reflection.Assembly")]
    3032
    3133namespace XMLSerialization
     
    411413                XmlNode id = objct.ChildNodes[1];
    412414                XmlNode members = objct.ChildNodes[2];
    413 
    414                 object newObject = System.Activator.CreateInstance(Type.GetType(type.InnerText));
     415               
     416                object newObject = null;
     417                try
     418                {
     419                    newObject = Type.GetType(type.InnerText).GetConstructor(BindingFlags.NonPublic |
     420                                    BindingFlags.Instance | BindingFlags.Public,
     421                                    null, new Type[0], null).Invoke(null);
     422                }
     423                catch (Exception ex)
     424                {
     425                    throw new Exception("Could not create instance of:" + type.InnerText,ex);
     426                }
    415427                createdObjects.Add(id.InnerText, newObject);
    416428
     
    636648                    catch(Exception ex)
    637649                    {
    638                         Console.WriteLine("Could not deserialize model element \"" + membername.InnerText + "\" of type \"" + membertype.InnerText + "\" because of:" + ex.Message);
     650                        throw new Exception("Could not deserialize model element \"" + membername.InnerText + "\" of type \"" + membertype.InnerText + "\" .", ex);
    639651                    }
    640652                }
     
    655667                    if (isList)
    656668                    {
    657                         ((IList) obj.GetType().GetField(membername).GetValue(obj)).Add(obj2);
     669                        try
     670                        {
     671                            ((IList)obj.GetType().GetField(membername, BindingFlags.NonPublic |
     672                                                                       BindingFlags.Public |
     673                                                                       BindingFlags.Instance).GetValue(obj)).Add(obj2);
     674                        }
     675                        catch (Exception ex)
     676                        {
     677                            throw new Exception("Can not find list field \"" + membername + "\" of \"" + obj.GetType().FullName + "\".", ex);
     678                        }
    658679                    }
    659680                    else
    660681                    {
    661                         if (obj != null && obj2 != null)
    662                         {
    663                             FieldInfo fieldInfo = obj.GetType().GetField(membername,
    664                                                                          BindingFlags.NonPublic |
    665                                                                          BindingFlags.Public |
    666                                                                          BindingFlags.Instance);
    667 
    668                             fieldInfo.SetValue(obj, obj2);
     682                        if (obj != null && obj2 != null){
     683                       
     684                            FieldInfo fieldInfo = null;
     685                            try
     686                            {
     687                                fieldInfo = obj.GetType().GetField(membername,
     688                                                                             BindingFlags.NonPublic |
     689                                                                             BindingFlags.Public |
     690                                                                             BindingFlags.Instance);
     691                                fieldInfo.SetValue(obj, obj2);
     692                            }
     693                            catch (Exception ex)
     694                            {
     695                                throw new Exception("Can not find field \"" + membername + "\" of \"" + obj.GetType().FullName + "\".", ex);
     696                            }
     697                           
    669698                        }
    670699                    }
     
    672701                catch(Exception ex)
    673702                {
    674                    Console.WriteLine("Could not restore reference beteen model element \"" + membername + "\" and its reference with id \"" + reference + "\" because of:" + ex.Message);
     703                   throw new Exception("Could not restore reference beteen model element \"" + membername + "\" and its reference with id \"" + reference + "\".", ex);
    675704                }
    676705            }
Note: See TracChangeset for help on using the changeset viewer.