gpt4 book ai didi

c# - .XmlSerializers.dll 如何使用它 - 被 Internet 上的示例搞糊涂了

转载 作者:行者123 更新时间:2023-11-30 18:42:11 28 4
gpt4 key购买 nike

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

但过去有人在 stackoverflow 上写信给我另一个与 XmlSerializers 相关的问题:

Adding a reference is not necessary, Xml serialization always tries an Assembly.Load() on the .XmlSerializers.dll assembly anyway. > Plus, you'll never reference the generated XmlSerializationWriterXxx and XmlSerializationReaderXxx classes directly in your code.

那么谁是对的呢?一些从业者能告诉我应该如何在我的项目和代码中使用这个 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;
}

最佳答案

“添加引用不是必需的”恰恰意味着 - 没有必要。

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

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

关于c# - .XmlSerializers.dll 如何使用它 - 被 Internet 上的示例搞糊涂了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5956654/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com