非常に醜いXMLを伝達する「Webサービス」を使用する必要があります。これは私たちによって開発されたものではなく、開発者に適切なXMLを理解させる機会はありません。XmlSerializer属性でこのXMLを解析するにはどうすればよいですか?
また、このWebサービスでは、HTTP GET URLパラメータ(要求本体ではありません)に同じ種類のXMLを受け入れています。なぜなら、それを開発した人はなぜ悪い習慣であるのか分かりません。
ので、このようなXMLをマッピングするための最速の方法です:このようなクラスに
<foo id="document">
<foo id="customer">
<bar name="firstname" value="Joe"/>
<bar name="lastname" value="Smith"/>
<foo id="address">
<bar name="city" value="New York"/>
<bar name="country" value="USA"/>
</foo>
</foo>
<bar name="somemoredata1" value="123"/>
<bar name="somemoredata2" value="abc"/>
</foo>
:
public class Document
{
public Customer Customer { get; set; }
public int SomeMoreData1 { get; set; }
public string SomeMoreData2 { get; set; }
}
public class Customer
{
public Address Address { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class Address
{
public string City { get; set; }
public string Country { get; set; }
}
などを使用。 XMLシリアライザの属性や、可能な限り定型コードを必要としない方法などがあります。
要素名はfoo
とbar
ですが、解析する必要があるXMLの構造は全く同じ規則に基づいています。
私は、もちろん、これらのクラスに手動でIXmlSerializable
を実装するか、単にFoo
とBar
クラスを作り、XmlSerializer
を有するものを使用しますが、これらのオプションのどれも、良い解決策のように見えることができませんでした。
ご回答いただきありがとうございます。
XmlSerialiserで行う必要がありますか?私はしばしば、XmlReaderを良いXMLで解析してビルドするだけで、狂ったXMLを気にするのは簡単ではないことがよくあります。 –
XmlSerializerで構文解析するのが最も簡単です。あなたがより良いまたはより簡単な解決策を持っているなら、答えを書いてください! :)私はそれについて不思議です。 – Venemo