代码之家  ›  专栏  ›  技术社区  ›  John

如何为多个类型创建XML序列化程序?

c#
  •  0
  • John  · 技术社区  · 15 年前

    我正在这样使用XmlSerializer,

    XmlSerializer xs = new XmlSerializer(typeof(myType));
    

    现在我有5个不同的“我的类型”。如何动态传递特定类型,以便不必重复相同的代码5次?

    4 回复  |  直到 15 年前
        1
  •  5
  •   John Saunders    15 年前

    尝试 XmlSerializer xs = new XmlSerializer(obj.GetType()); .

        2
  •  0
  •   Henri    15 年前

    除非mytype是类型,否则将不会编译typeof(mytype)。

    如果有该类型的实例,可以执行instance.getType();

    恐怕没有别的选择了。无论如何,您必须指定一些类型编译时间。

        3
  •  0
  •   Anthony Pegram    15 年前

    另一种选择是使用泛型方法。举个例子:

    static T DeserializeObject<T>(XmlReader reader)
    {
        XmlSerializer serializer = new XmlSerializer(typeof(T));
        T t = (T)serializer.Deserialize(reader);
        return t;
    }
    

    使用它:

    static void Main()
    {
        string xml = "<Foo><Blah>Hello World</Blah></Foo>";
    
        using (MemoryStream stream = new MemoryStream(Encoding.Default.GetBytes(xml)))
        {
            XmlReader reader = XmlReader.Create(stream);
            Foo foo = DeserializeObject<Foo>(reader);
    
            Console.WriteLine(foo.Blah);
        }
    }
    
        4
  •  -1
  •   ChrisNel52    15 年前

    只需创建一个小函数,并使参数的类型为“type”。

        private void SerializeType(Type theType)
        {
            XmlSerializer xs = new XmlSerializer(theType);
        }