.XmlSerializers.dll如何使用它 - 被互联网上的例子弄糊涂了

本文关键字:弄糊涂 互联网 dll 何使用 XmlSerializers | 更新日期: 2023-09-27 17:56:07

我是C#的新手。我已经开始使用 SGEN 生成的 XmlSerializers.dll我现在真的很困惑。尽管我找不到任何真正的分步教程如何正确使用它,但我也对不同的建议感到困惑。

我读了很多SGEN文章,但我仍然不确定如何在我的项目中使用生成的库。

有没有一个有实际编码实践的人可以一劳永逸地向我解释使用它的正确方法?

我在想我明白如何使用它,但昨天我找到了这个教程:http://www.dotnetfunda.com/articles/article1105-optimized-way-of-xml-serialization-using-sgen-utility-.aspx

这家伙补充说.XmlSerializers.dll到他的项目引用并使用如下代码来序列化:

static string SerializebySGEN()
{
  Person p = new Person();
  p.Age = 29;
  p.Name = "Satya Narayan Sahoo";
  StringBuilder buildr = new StringBuilder();
  StringWriter writr = new System.IO.StringWriter(buildr);
  PersonSerializer mySerialzer = new PersonSerializer();
  mySerialzer.Serialize(writr, p);
  string str = writr.ToString();
  return str;
}
PersonSerializer

mySerialzer = new PersonSerializer();

但是过去在堆栈溢出上,有人写信给我的另一个与 XmlSerializers 相关的问题:

不需要添加引用, XML 序列化总是尝试 Assembly.Load() 在 .无论如何,XmlSerializers.dll程序集。 > 另外,您永远不会引用 生成的 XmlSerializationWriterXxx 和 XmlSerializationReaderXxx 类 直接在您的代码中。

那么谁是对的呢?somne 从业者能否告诉我如何在项目和代码中使用这个 SGEN 生成的库?我真的很想好好地使用它!:)

编辑:或者也许我在引用的文章中误解了一些东西,两个人都有权利?我迷路了:)

Edit2:我写了下面的方法来反序列化我的一个可序列化类(MySerializableClass),我使用SGEN生成的类MySerializableClassSerializer。可以吗?(我想是的,请确认;))

        /// <summary>
        /// Deserializes the specified XML source into object using SGEN generated class.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="xmlSource">The XML source.</param>
        /// <param name="isFile">if set to <c>true</c> the the source is a text File else it is a XML String.</param>
        /// <returns>Return object with deserialized XML</returns>
        public static MySerializableClass MySerializableClassSgenDeserialize(string xmlSource, bool isFile = true)
        {
            MySerializableClass data = new MySerializableClass();
            if (isFile)
            {
                using (TextReader textReader = new StreamReader(xmlSource))
                {
                    MySerializableClassSerializer xSerializer = new MySerializableClassSerializer();
                    data = (MySerializableClass)xSerializer.Deserialize(textReader);
                }
            }
            else
            {
                using (StringReader xmlText = new StringReader(xmlSource))
                {
                    MySerializableClassSerializer xSerializer = new MySerializableClassSerializer();
                    data = (MySerializableClass)xSerializer.Deserialize(xmlText);
                }
            }
            return data;
        }

.XmlSerializers.dll如何使用它 - 被互联网上的例子弄糊涂了

"

添加引用不是必需的"正是这个意思 - 没有必要。

即使您不打算引用程序集(和其他文件

),也有理由将程序集(和其他文件)添加到项目中。 即,如果要创建安装项目或发布解决方案,则希望从解决方案中引用需要部署的所有文件,即使代码不直接使用某些文件。

我个人不建议过多地深入研究这个主题,因为初始学习到期 - 通常运行时生成的程序集适用于大多数场景。