1

オブジェクトへの xml 文字列の逆シリアル化で問題が発生しています。エラーは発生していませんが、値が入力されていません (値はnull単に ではありません"")。同じ問題を抱えているいくつかの質問を見てきましたが、これらの問題は通常、[XmlRoot]または[XmlElement]定義されていない人々で構成されていました。

ここに私のxml文字列の一部があります:

string xmlString = @"<results><dpv_answer value=""Y"" /><zip value=""95118-4007"" /></results>"

非シリアル化する関数は次のとおりです。

StandardAddress address = new StandardAddress();

using (XmlReader reader = XmlReader.Create(new StringReader(xml)))
{
    try
    {
        address = (StandardAddress)new XmlSerializer(typeof(StandardAddress)).Deserialize(reader);
    }
    catch (InvalidOperationException x)
    {
        // String passed is not XML, simply return defaultXmlClass
    }
}

return address;

オブジェクト宣言の一部を次に示します。

[XmlRoot("results")]
public class StandardAddress
{
    [XmlElement(ElementName = "dpv_answer")]
    public string dpv_answer { get; set; }
    [XmlElement(ElementName = "zip")]
    public string zip { get; set; }
}
4

2 に答える 2

3

各要素には、値を取得しようとしている属性があります。また、属性は同じであるため、fcuesta が提案したように、複数のシリアライズ可能なクラスを持つ代わりに、次のように単一のクラスを使用できます。

[XmlRoot("results")]
public class StandardAddress
{
    [XmlElement(ElementName = "dpv_answer")]
    public Element DpvAnswer { get; set; }

    [XmlElement(ElementName = "zip")]
    public Element Zip { get; set; }
}

public class Element
{
    [XmlAttribute("value")]
    public string Value { get; set; }
}

これは同様の要素で機能し、便利です。ただし、将来的に要素を独自のスキーマに変更する場合は、fcuesta が示唆するように、要素を分離する必要があります。

于 2013-08-23T19:14:25.137 に答える