のXmlSerializerを使用して文書をデシリアライズ正しくXmlSerializerを使用してXML文書を名前空間で非直列化するにはどうすればよいですか?
ドキュメント
<?xml version=\"1.0\"?>
<ns0:ElementA xmlns:ns0=\"urn:some-namespace\">
<Prop1>Some Value</Prop1>
<Prop2>Some other value</Prop2>
</ns0:ElementA>
クラス
[XmlRoot(Namespace = "urn:some-namespace")]
public class ElementA
{
[XmlElement]
public string Prop1 { get; set; }
[XmlElement]
public string Prop2 { get; set; }
}
PROP1とPROP2の両方が、デシリアライゼーションの末尾のヌルされ、デシリアライズされていません。
ドキュメントの構造を変更して名前空間を取り除くことができないため、私は自分の側で正しく直列化を処理する必要があります。
文書は、私が正しく直列化復元を処理するためにElementAの属性を設定する必要がありますどのように再現
の目的のために簡素化されました?
- ここでは、問題を再現するための完全なコードです -
namespace ConsoleApplication1
{
using System;
using System.IO;
using System.Xml.Serialization;
public class Program
{
[XmlRoot(Namespace = "urn:some-namespace")]
public class ElementA
{
[XmlElement]
public string Prop1 { get; set; }
[XmlElement]
public string Prop2 { get; set; }
}
static void Main(string[] args)
{
var element =
"<?xml version=\"1.0\"?>" + Environment.NewLine +
"<ns0:ElementA xmlns:ns0=\"urn:some-namespace\">" + Environment.NewLine+ " <Prop1>Some Value</Prop1>" + Environment.NewLine +
" <Prop2>Some other value</Prop2>" + Environment.NewLine +
"</ns0:ElementA>";
XmlSerializer serializer = XmlSerializer.FromTypes(new[] { typeof(ElementA) })[0];
ElementA result;
using (var reader = new StringReader(element))
{
result = serializer.Deserialize(reader) as ElementA;
}
Console.WriteLine("Prop1: " + result.Prop1);
Console.WriteLine("Prop2: " + result.Prop2);
Console.ReadKey();
}
}
}
ランダムな考え方 - プロパティで '[XmlElement(Namespace =" ")]'を試してみましたか? –
@Marc、それはまさに何が行われる必要があります。これを回答として投稿することができます。 –
@ダリン - 私はモバイルで、検証する立場にはないので、私は答えとして投稿しませんでした(私は合理的に答えに自信を持っているのが好きです)。ところで、あなたが私を追い越す前に私は数ヶ月しか残っていないように見えます; p –