私はアプリケーションを.NETコアnetcoreapp1.0
のnet451
からアップグレードしています。プロセスの大部分は非常にうまくいって、私が見ているマイナス1つの問題にすべてが移植されています。.NETコアで未知の属性のXMLシリアル化
私はSystem.Xml
とSystem.Xml.Serialization
を使用してAPIエンドポイント(これは私が全く制御できません)からXMLをシリアライズしました。それはうまくいっていましたが、XMLに関する問題のために、いつもUnknownAttribute
という1つの属性が戻ってきました。私は今System.Xml.XmlSerializer 4.0.11ライブラリを使用し、.NETのコアへのアップグレードでは
XmlReader reader = XmlReader.Create(stream);
var serializer = new XmlSerializer(typeof(PersonDetails));
var personDetails = (PersonDetails)serializer.Deserialize(reader);
serializer.UnknownAttribute += new XmlAttributeEventHandler((object sender, XmlAttributeEventArgs e) => {
unknownAttr.Add(e.Attr.Name, e.Attr.Value);
});
// Handle the missing map value if it exists.
string addressValue;
if(unknownAttr.TryGetValue("Address_x0_", out addressValue))
{
personDetails.Address = addressValue;
}
:私はこのようなイベントに配線でそれを処理していました。今、UnknownAttributeイベントはもはやXmlSerializer
の一部ではないようです。私は未知の属性を扱う別の方法を見つけることができず、正しい方向にポインタを感謝するでしょう。
ドキュメント[ここ](https://docs.microsoft.com/en-us/dotnet/core/api/system.xml.serialization.xmlanyattributeattribute)から、dotnetcoreはまだ['XmlAnyAttributeAttribute']をサポートしていますhttps://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlanyattributeattribute.aspx)。 '[XmlAnyAttribute]'プロパティを 'PersonDetails'クラスの[C#で属性のリストを持つ要素を逆直列化する方法](https://stackoverflow.com/questions/32884364)の行に沿って、内部のあなたの未知の属性のために。 – dbc
ありがとう@dbc。私はそれを見ましたが、その例を試してみると、 'XmlAttribute []'は型ではありません。私が図書館を紛失しているのか、何かがひどく壊れているのかどうかは分かりません。私は 'XmlAttributeAttribute'、' XmlAttributes'、および 'XmlAttributeOverrides'を持っています。 'XmlAttribute'で他に何もありません。何か案が?編集:私もここにそれを参照してください:https://docs.microsoft.com/en-us/dotnet/core/api/system.xml#System_Xml_XmlAttribute、それを使用しようとするとコンパイルされません。 – JasCav
これが必要な場合があります:https://www.nuget.org/packages/System.Xml.XmlDocument/ – dbc