2

私は次のようなXMLを持っています:

<Stat Type="first_name">[Value]</Stat>
<Stat Type="last_name">[Value]</Stat>
<Stat Type="known_name">[Value]</Stat>

これをオブジェクトに逆シリアル化したい。「Stat」と呼ばれる要素名が1つあるため、次のようなものを取得するのが難しくなっています。

[XmlAttribute("first_name")]
public string FirstName{get;set;}

[XmlAttribute("last_name")]
public string LastName{get;set;}

[XmlAttribute("known_name")]
public string KnownName{get;set;}

上記のXMLを次のようなオブジェクトに取り込む方法はありますか?

public string FirstName{get;set;}
public string LastName{get;set;}
public string KnownName{get;set;}

ありがとう。

4

3 に答える 3

2

私は拡張機能を使用してこれを解決することができました。理想的ではありません。統計のリストを取得します:

[XmlElement("Stat")]
public List<Stat> Stats { get; set;}

次に、次のような個別のプロパティがあります。

public string FirstName
{
   get { return Stats.GetStat("first_name"); }
}

次に、StatsプロパティのGetStat拡張メソッドは、関連するキーを取得します。残念ながら、この方法では、取得したいプロパティごとにそのリストを実行します。

public static string GetStat(this List<Stat> stats, string key)
{
  var val = stats.FirstOrDefault(item => item.Type == key);

  if (val != null)
    return val.Value ?? String.Empty;
  return String.Empty;
} 
于 2012-07-30T14:50:32.770 に答える
1

シリアル化を使用する場合は、中間オブジェクトが必要になると思います。したがって、次のようなものに逆シリアル化します。

public class Stat
{
    [XmlAttribute("Type")]
    public string Type { get; set; }

    [XmlText]
    public string Value { get; set; }
}

次に、コードを記述して、目的の形状に平坦化します。

于 2012-07-27T12:00:35.533 に答える
0

おそらく、XPathなどを使用してXMLを自分で解析する必要があります。鉱山は少し錆びていますが、次のようなものです。

var stat = xmlDocument.DocumentElement.GetSingleNode("stat[@type='first_name']");
var value = stat.InnerText;
于 2012-07-27T11:55:17.333 に答える