:<?xml ?> .NETでxmlシリアル化の一部を制御するにはどうすればよいですか?私は私のオブジェクトをシリアル化するために、このメソッドを使用しています
<?xml version="1.0" encoding="utf-16"?>
<MyObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
しかし、私は、それは次のようになりたい::
<?xml version = "1.0" encoding="Windows-1252" standalone="yes"?>
<MyObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
public static string XmlSerialize(object o)
{
var stringWriter = new StringWriter();
var xmlSerializer = new XmlSerializer(o.GetType());
xmlSerializer.Serialize(stringWriter, o);
string xml = stringWriter.ToString();
stringWriter.Close();
return xml;
}
をそれはこのように始まりXMLを作りますでは、エンコードをWindows-1252に変更してstandalone = yesに設定するにはどうすればよいですか? さらに、xmlns値を除外するオブジェクトを取得する方法はありますか?
this oneのようないくつかの類似した質問がありましたが、私はそれがもっと簡単かもしれないと思っていました。
更新2:Johnの回答とコメントを見て、これについてもっと考えてみたら、2番目の方法を作ることにしました。私は、1つの機会にサードパーティーのためだけにこの不気味なカスタムXMLを作成することは、最初の場所で "XmlSerialize"として一般的なものと呼ばれるべきだとは思わない。その後、
xElement.Attributes().Where(a => a.IsNamespaceDeclaration && a.Value == "http://www.w3.org/2001/XMLSchema").Remove();
、それはそれはジョンのコードでそれをXMLに書き込みます
ので、私は、XML文書を受け取り、まず、このようなものの名前空間の要素を削除する第二の方法を作成しました。最後に、この出力以下、そのXMLを返します。
new XDeclaration("1.0", "Windows-1252", "yes").ToString()
そして、それは醜いだが、それは私が私のXMLを理解するには、このサードパーティのために必要な正確に何を私に取得します。
実際には、 'XmlTextReader'と' XmlTextWriter'の代わりに 'XmlReader.Create'と' XmlWriter.Create'を使用してください。また、これらのものを 'using'ブロックに入れる必要があります。 –
最終的に私はあなたのコードに行きました。しかし、すべてを閉じている限り、ブロックを使用するのと同じくらいうまくいくとは限りません。 – Chris
いいえ 'using'ブロックは、例外が発生した場合でもオブジェクトが破棄されていることを確認します。 –