.XmlSerializers.dll如何使用它 - 通过Internet上的示例混淆

时间:2011-05-10 21:24:00

标签: c# xml-serialization sgen

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

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

有没有真正编码练习的人可以一劳永逸地解释我使用它的正确方法吗?

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

已将.XmlSerializers.dll添加到他的Project 引用中,并使用此类代码进行序列化:

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();

但是在过去的stackoverflow上有人写了我连接到XmlSerializers的另一个问题:

  

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

那么谁是对的? somne​​从业者可以告诉我如何将这个SGEN生成的库用于我的项目和代码吗?我真的想以良好的方式使用它! :)

编辑:或者我在引用的文章中误解了某些内容并且这两个人都对吗?我迷路了:))

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

        /// <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;
        }

1 个答案:

答案 0 :(得分:0)

“无需添加引用”意味着 - 没有必要。

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

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