私は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に関連する別の質問に誰かが書いてくれました:
参照を追加する必要はありません。Xml シリアル化は常に .XmlSerializers.dll アセンブリで Assembly.Load() を試みます。 > さらに、生成された XmlSerializationWriterXxx および XmlSerializationReaderXxx クラスをコードで直接参照することはありません。
では、誰が正しいのでしょうか? この SGEN 生成ライブラリを自分のプロジェクトとコードでどのように使用すればよいか、専門家に教えてもらえますか? 大切に使いたいと思います!:)
編集:または、引用された記事で何かを誤解し、両方の人が正しいのでしょうか?道に迷いました :)
Edit2: Serializable Classes (MySerializableClass) の 1 つを逆シリアル化するメソッドを以下に記述し、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;
}