Laden...

XmlSerializer: Property of type Type

Erstellt von Tarion vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.003 Views
T
Tarion Themenstarter:in
381 Beiträge seit 2009
vor 12 Jahren
XmlSerializer: Property of type Type

Ich verwende den XmlSerializer. Ich habe ein Objekt mit einer Property vom type Type. Hier bekomme ich eine Exception ich soll XmlInclude oder SoapInclude verwenden.

Die beiden Attribute wollen aber den Type haben und das kommt für mich nicht in Frage. Muss ich jetzt nen Workarround gehen und meine Type Poperties als Strings abspeichern und beim Laden wieder in Types konvertieren oder gibt es da doch eine elegante Möglichkeit?

6.910 Beiträge seit 2009
vor 12 Jahren

Hallo Tarion,

vllt. kann der DataContractSerializer damit umgehen, sicher bin ich mir aber nicht.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

D
33 Beiträge seit 2010
vor 12 Jahren

naja da man ja nicht weiß wie der string serialisiert werden soll (z.b mit assembly name etc.) muss man schon selber was machen, ich finde es jetzt aber nicht sooo unständlich zu serializieren:


    public class XmlSerializerTest
    {
        [XmlIgnore]
        public Type Property
        {
            get;
            set;
        }

        [XmlAttribute("Property")]
        public string PropertyString
        {
            get
            {
                return Property.FullName;
            }
            set
            {
                Property = Type.GetType(value);
            }
        }
    }

T
Tarion Themenstarter:in
381 Beiträge seit 2009
vor 12 Jahren

Ich hab mir jetzt ne eigene serialisierbare Klasse gemacht die ich nutze:


using System;
using System.Collections.Generic;
using System.Text;
using System.Xml.Serialization;

namespace Server.ArxObscura.Engine.Scriptengine.Types
{
	public class TypeInformation
	{
        private string m_TypeName;
        private Type m_Type;

        public string TypeName
        {
            get
            {
                return m_TypeName;
            }
            set
            {
                m_TypeName = value;
                m_Type = null; // Will search for the type on next TypeInformation.Type._get()
            }
        }

        [XmlIgnore]
        public Type Type
        {
            get {
                if (m_Type == null && !String.IsNullOrEmpty(TypeName))
                {
                    m_Type = Server.ScriptCompiler.FindTypeByName(TypeName, false);
                }
                return m_Type; 
             }
            set
            {
                m_Type = value;
                if (value != null)
                {
                    m_TypeName = value.FullName;
                }
            }
        }

		public Boolean Compiled
		{
			get
			{
				if (Type != null) return true;
				return false;
			}
		}

        /// <summary>
        /// For XmlSerialization
        /// </summary>
        public TypeInformation()
        {
        }

		public TypeInformation(string typeName)
		{
			TypeName = typeName;
		}

		public TypeInformation(Type type)
		{
			Type = type;
		}
	}

}