としてデシリアライズされます。XML属性は、私はXML、以下のデシリアライズしようとしている、ヌル
[XmlRoot(ElementName = "Parent", Namespace = "http://main.com")]
public class Parent
{
[XmlElement(ElementName = "Child")]
public Child Child{ get; set; }
}
[XmlType(Namespace = "http://sub.com")]
public class Child
{
[XmlAttribute(AttributeName = "value")]
public string Value { get; set; }
}
XMLはHttpRequestMessage内で、HTTPのPOSTリクエストのボディとして来るオブジェクト:
は、私は2つのクラスがあります。デシリアライズするための機能は次のとおりです。
private Parent ExtractModel(HttpRequestMessage request)
{
var serializer = new XmlSerializer(typeof(Parent));
var model = (Parent)serializer.Deserialize(request.Content.ReadAsStreamAsync().Result);
return model;
}
しかし、それはmodel.Child.Value == null
ことが表示されますこの関数を呼び出した後。
クラスやプロパティのC#属性のNamespaceパラメータを少し試してみました(たとえば、[XmlAttribute]に移動するか、[XmlType]と[XmlAttribute]の両方に配置します)、何も変更しませんでした。私はこの権利を作るように見えることはできません。私が名前空間を全く使わない(要求とモデル定義の両方で)場合、値はちゃんと読み込まれます。
私には何が欠けていますか?
ありがとうございました。どういうわけか、私はこの仕組みについて誤った考えを持っていました。つまり、クラス全体に名前空間を配置すると、すべてのメンバーにとってデフォルトになります。このように、私はParent NamespaceがChildのデフォルトであり、Child Namespaceは実際にはValueのデフォルトとして機能すると考えました... しかし、それは明らかにそうではありません。主な混乱は...どのような場合に、ネームスペースをメンバーに置くべきか? – Sushi271
あなたはあなたのXMLにそれらがある名前空間を配置します。 – Sefe
これは、 'http:// main.com'名前空間をChildクラスまたはParentのChildプロパティに置くことができることを意味しますか?それは問題ではありませんか?彼らはちょっと同じものを表します。 – Sushi271