ac# クラスをシリアライズしたいのですが、クラスに属性を付けたくありません。コードプレックスで FluentXML を見つけましたが、単なるアイデア プロジェクトのようで、とにかく機能していません
4 に答える
これが私のために働いた例です。Serialize オブジェクトから文字列へ
「クラスを xml 文字列にシリアル化する」をググったところです。
String XmlizedString = null;
XmlSerializer x = new XmlSerializer(objectNameHere.GetType());
MemoryStream memoryStream = new MemoryStream();
XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
x.Serialize(xmlTextWriter, objectNameHere);
memoryStream = (MemoryStream)xmlTextWriter.BaseStream;
UTF8Encoding encoding = new UTF8Encoding();
XmlizedString = encoding.GetString(memoryStream.ToArray());
XmlizedString = XmlizedString.Substring(1);
このような文字列を生成しました
<?xml version="1.0" encoding="utf-8"?><Employee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><Name>StackOverflow User</Name><Title>User of StackOverflow.</Title><Salary>70000</Salary><Skills><string>Being Awesome</string><string>Being sweet</string></Skills></Employee>
次のような単純な Employee クラスから:
public class Employee
{
public string Name { get; set; }
public string Title { get; set; }
public double Salary { get; set; }
public Collection<string> Skills { get; set; }
}
を使用するためにクラスに属性を配置することを強制するものは何もありませんXmlSerializer
。この場合、生成された XML は単にオブジェクト構造を反映します。一方、生成された XML を制御したい場合は、代わりに aXmlWriter
または anを使用できますXDocument
。しかし、属性はまさにその目的のために設計されており、使用する必要があります。なんらかの理由でシリアライズしているクラスを変更できない場合 (たとえば、そのソース コードがないため) は、属性で装飾できる別のクラスを常に設計し、元のクラスをこのモデルにマップすることができます。シリーズ化します。
属性なしで使用して、XmlSerializer
それが提供するデフォルト名を使用するか、属性を使用せずにIXmlSerializable
、よりカスタマイズされた手動出力のためにクラスにインターフェイスを実装することもできます。
属性を使用しない十分な理由があると仮定すると、 を使用できますがXmlSerializer
、パブリック メンバーでのみ機能し、パブリック型とパラメーターなしのコンストラクターも必要であることに注意してください。