C# 从我的XML获取信息

C# 从我的XML获取信息,c#,xml,C#,Xml,我对XML序列化/反序列化非常陌生,我想知道如何将标记(XmlElement、XmlAttribute等)应用于我正在写入XML文件的以下对象,以使我在以后使用LINQ或类似工具获取所需数据时达到最佳效果。让我举一个例子: [XmlRoot("Root")] public class RootObject { public Services Services { get; set; } } public class Services

我对XML序列化/反序列化非常陌生,我想知道如何将标记(XmlElement、XmlAttribute等)应用于我正在写入XML文件的以下对象,以使我在以后使用LINQ或类似工具获取所需数据时达到最佳效果。让我举一个例子:

    [XmlRoot("Root")]
    public class RootObject
    {
        public Services Services { get; set; }
    }

    public class Services
    {
        public Service TileMapService { get; set; }
    }

    public class Service
    {
        public string Title { get; set; }
        public string href { get; set; }
    }
在这里,我定义了一些属性,我将使用稍后添加的值将这些属性写入XML。此时,我已将此方法中的值硬编码为:

public static void RootCapabilities()
    {
        RootObject ro = new RootObject()
        {
            Services = new Services()
            {
                TileMapService = new Service()
                {
                    Title = "Title",
                    href = "http://something"
                }
            }
        };
这使我获得了以下XML输出:

<?xml version="1.0" encoding="utf-8"?>
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Services>
    <TileMapService>
      <Title>Title</Title>
      <href>http://something</href>
    </TileMapService>
  </Services>
</Root>

标题
http://something
我的问题是,这是否是一种有效的方法,或者我是否必须使用“XmlElement”和“XmlAttribute”标记在以后反序列化这个XML文件并从中获取我想要的信息(例如“title”)


我不知道如何写这个问题,所以如果太模糊,请告诉我。

如果我是你,我不会使用XML序列化。对模式/对象结构的任何更改都会立即失去向后兼容性,因为XML序列化是一种技术

而是将XML序列化从实际的类结构中分离出来,这样您就可以对XML/对象模式进行更改,并编写适当的迁移函数来处理将来所做的任何更改


而是使用LINQ to XML类来构造XML文档并保存它,因为它们是.NET中以解耦方式将对象结构转换为XML的最简单方法。

如果我是你,我不会使用XML序列化。对模式/对象结构的任何更改都会立即失去向后兼容性,因为XML序列化是一种技术

而是将XML序列化从实际的类结构中分离出来,这样您就可以对XML/对象模式进行更改,并编写适当的迁移函数来处理将来所做的任何更改


而是使用LINQ to XML类来构造XML文档并保存它,因为它们是.NET中以解耦方式将对象结构转换为XML的最简单方法。

如果我是你,我不会使用XML序列化。对模式/对象结构的任何更改都会立即失去向后兼容性,因为XML序列化是一种技术

而是将XML序列化从实际的类结构中分离出来,这样您就可以对XML/对象模式进行更改,并编写适当的迁移函数来处理将来所做的任何更改


而是使用LINQ to XML类来构造XML文档并保存它,因为它们是.NET中以解耦方式将对象结构转换为XML的最简单方法。

如果我是你,我不会使用XML序列化。对模式/对象结构的任何更改都会立即失去向后兼容性,因为XML序列化是一种技术

而是将XML序列化从实际的类结构中分离出来,这样您就可以对XML/对象模式进行更改,并编写适当的迁移函数来处理将来所做的任何更改


而是使用LINQ to XML类来构造XML文档并保存它,因为它们是.NET中以解耦方式将对象结构转换为XML的最简单方法。

如果输出是您所期望的,我认为您不应该更改任何内容

当您想要更改默认行为(例如不包含字段,将一个字段作为属性包含…)时,您应该像或那样使用装饰器


他们的角色是获得对序列化的完全控制并避免意外行为

如果输出是您期望的,我认为您不应该更改任何内容

当您想要更改默认行为(例如不包含字段,将一个字段作为属性包含…)时,您应该像或那样使用装饰器


他们的角色是获得对序列化的完全控制并避免意外行为

如果输出是您期望的,我认为您不应该更改任何内容

当您想要更改默认行为(例如不包含字段,将一个字段作为属性包含…)时,您应该像或那样使用装饰器


他们的角色是获得对序列化的完全控制并避免意外行为

如果输出是您期望的,我认为您不应该更改任何内容

当您想要更改默认行为(例如不包含字段,将一个字段作为属性包含…)时,您应该像或那样使用装饰器


他们的角色是获得对序列化的完全控制并避免意外行为

如果您不想担心序列化的本质,
XmlSerializer
总是对我很好

public static void SerializeObject(T obj, string file)
{
    XmlSerializer s = new XmlSerializer(typeof(T));
    TextWriter w = new StreamWriter(file);
    s.Serialize(w, obj);
    w.Close();
}

public static T DeserializeObject(string file)
{
    XmlSerializer s = new XmlSerializer(typeof(T));
    using (StreamReader r = new StreamReader(file))
    {
        return (T)s.Deserialize(r);
    }
}

但这实际上应该只用于引用类型(对象,而不是基元类型或结构)
反序列化
可以返回null,将其转换为值类型只会带来心痛。

如果您不想担心序列化的实质性问题,
XmlSerializer
一直对我很好

public static void SerializeObject(T obj, string file)
{
    XmlSerializer s = new XmlSerializer(typeof(T));
    TextWriter w = new StreamWriter(file);
    s.Serialize(w, obj);
    w.Close();
}

public static T DeserializeObject(string file)
{
    XmlSerializer s = new XmlSerializer(typeof(T));
    using (StreamReader r = new StreamReader(file))
    {
        return (T)s.Deserialize(r);
    }
}

但这实际上应该只用于引用类型(对象,而不是基元类型或结构)
反序列化
可以返回null,将其转换为值类型只会带来心痛。

如果您不想担心序列化的实质性问题,
XmlSerializer
一直对我很好

public static void SerializeObject(T obj, string file)
{
    XmlSerializer s = new XmlSerializer(typeof(T));
    TextWriter w = new StreamWriter(file);
    s.Serialize(w, obj);
    w.Close();
}

public static T DeserializeObject(string file)
{
    XmlSerializer s = new XmlSerializer(typeof(T));
    using (StreamReader r = new StreamReader(file))
    {
        return (T)s.Deserialize(r);
    }
}

但这实际上应该只用于引用类型(对象,而不是基元类型或结构)
反序列化
可以返回null,将其转换为值类型只会带来心痛。

如果您不想担心序列化的实质性问题,
XmlSerializer
一直对我很好

public static void SerializeObject(T obj, string file)
{
    XmlSerializer s = new XmlSerializer(typeof(T));
    TextWriter w = new StreamWriter(file);
    s.Serialize(w, obj);
    w.Close();
}

public static T DeserializeObject(string file)
{
    XmlSerializer s = new XmlSerializer(typeof(T));
    using (StreamReader r = new StreamReader(file))
    {
        return (T)s.Deserialize(r);
    }
}
但这实际上应该只用于引用类型(对象,而不是基元类型或结构)<代码>反序列化可以返回null并将其强制转换为