Ejemplo n.º 1
0
        public ConfigMessageSerializerClass CreateClassInfoFromType(Type type, SerializationDefaults serializationDefaults = null)
        {
            if (serializationDefaults == null)
            {
                serializationDefaults = new SerializationDefaults();
            }
            MessageSerializedClassInfo messageSerializedClassInfo = new MessageSerializedClassInfo(type, null, serializationDefaults);

            ConfigMessageSerializerClass configMessageSerializerClass = new ConfigMessageSerializerClass();
            ConfigClassInfo configClassInfo = new ConfigClassInfo();

            configClassInfo.AssemblyName           = messageSerializedClassInfo.ClassType.Assembly.FullName;
            configClassInfo.ClassFullName          = messageSerializedClassInfo.ClassType.FullName;
            configClassInfo.MessageClassAttribute  = messageSerializedClassInfo.MessageClassAttribute;
            configMessageSerializerClass.ClassInfo = configClassInfo;

            foreach (MessageSerializedPropertyInfo messageSerializedPropertyInfo in messageSerializedClassInfo.Properties)
            {
                ConfigPropertyInfo configPropertyInfo = new ConfigPropertyInfo();
                configPropertyInfo.Name = messageSerializedPropertyInfo.PropertyInfo.Name;
                //configPropertyInfo._messagePropertyAttribute = messageSerializedPropertyInfo.MessagePropertyAttribute;
                configPropertyInfo.Attributes.Add(messageSerializedPropertyInfo.MessagePropertyAttribute);
                configClassInfo.Properties.Add(configPropertyInfo);
            }

            return(configMessageSerializerClass);
        }
Ejemplo n.º 2
0
        // Do the same with ReadFromFile
        public static ConfigMessageSerializerClass ReadFromFile(string filename)
        {
            FileStream    fileStream    = new FileStream(filename, FileMode.Open);
            XmlSerializer xmlSerializer = new XmlSerializer(typeof(ConfigMessageSerializerClass), GetAttributeOverrides(GetDefaultExtraTypes()));
            ConfigMessageSerializerClass configMessageSerializerClass = (ConfigMessageSerializerClass)xmlSerializer.Deserialize(fileStream);

            fileStream.Close();
            return(configMessageSerializerClass);
        }
Ejemplo n.º 3
0
        // These functions are for reading and writing from files
        public static void WriteToFile(ConfigMessageSerializerClass messageSerializedClassInfo)
        {
            // The ClassFullName will be something like SomeNamespace.SomethingElse.ClassName
            // We just want the ClassName part
            // LastIndexOf will return -1 if there is no . so by adding 1 we'll get the whole string
            string filename = GetDefaultFileName(messageSerializedClassInfo.ClassInfo.ClassFullName);

            WriteToFile(filename, messageSerializedClassInfo);
        }
Ejemplo n.º 4
0
        protected static List <Type> GetExtraTypes(ConfigMessageSerializerClass configMessageSerializerClass)
        {
            var extraTypes = new HashSet <Type>();

            extraTypes.Add(typeof(Attribute));
            foreach (var property in configMessageSerializerClass.ClassInfo.Properties)
            {
                foreach (var attribute in property.Attributes)
                {
                    if (!extraTypes.Contains(attribute.GetType()))
                    {
                        extraTypes.Add(attribute.GetType());
                    }
                }
            }

            return(extraTypes.ToList());
        }
Ejemplo n.º 5
0
        public static void WriteToFile(string filename, ConfigMessageSerializerClass configMessageSerializerClass)
        {
            TextWriter writer = new StreamWriter(filename);

            // The XmlSerializer won't work correctly if you have a List<Something> and there are types
            // that derive from Something, like SomethingElse in the list.  So we go through and find
            // them from the attributes so the XmlSerializer is aware of them.
            // Here's some articles of note:
            // https://stackoverflow.com/questions/11886290/use-the-xmlinclude-or-soapinclude-attribute-to-specify-types-that-are-not-known
            // https://stackoverflow.com/questions/4616505/is-there-a-reason-why-a-base-class-decorated-with-xmlinclude-would-still-throw-a
            // https://stackoverflow.com/questions/2689566/how-to-add-xmlinclude-attribute-dynamically/2689660#2689660
            // https://en.it1352.com/article/4ff854d603034ef3a6364c581b252959.html

            XmlAttributeOverrides attributeOverrides = GetAttributeOverrides(configMessageSerializerClass);
            XmlSerializer         xmlSerializer      = new XmlSerializer(typeof(ConfigMessageSerializerClass), attributeOverrides);

            xmlSerializer.Serialize(writer, configMessageSerializerClass);
            writer.Close();
        }
Ejemplo n.º 6
0
        public static void WriteDefaultToFile(string filename, Type type)
        {
            ConfigMessageSerializerClass configMessageSerializerClass = Serializer.Instance.CreateClassInfoFromType(type);

            WriteToFile(filename, configMessageSerializerClass);
        }
Ejemplo n.º 7
0
        public static XmlAttributeOverrides GetAttributeOverrides(ConfigMessageSerializerClass configMessageSerializerClass)
        {
            var extraTypes = GetExtraTypes(configMessageSerializerClass);

            return(GetAttributeOverrides(extraTypes));
        }