1

カスタム エラー メッセージを提供する方法、または少なくとも XML 投稿の要素名を Web API に指定する方法を見つけようとしています。現在、私が得ているモデル状態エラーは

XML 文書にエラーがあります (2、4)。

このエラーの内部例外は、次の詳細情報を提供します。

文字列「false fds」は有効なブール値ではありません。

XML を検索してその値が存在する場所を特定するのではなく、無効な値を含む要素を示す、より具体的なものをユーザーに返すことができるようにしたいと考えています。

私が投稿しているXMLは次のとおりです。

<?xml version='1.0'?>
<checkin>
    <checkinType>1</checkinType>
    <server>server1</server>
    <notes>New Checkin</notes>
    <productCheckins>
        <ihsCheckin>
            <vendor>IBM</vendor>
            <make>HTTP Server</make>
            <model></model>
            <version>8.5.5.0</version>
            <installLocation>/opt/IBM</installLocation>
            <is64Bit>false fds</is64Bit>
        </ihsCheckin>
</productCheckins>
</checkin>

変換しようとしているクラスは次のとおりです。

[XmlRoot("checkin")]
public class Checkin
{
    [XmlElement("checkinTime")]
    public DateTime CheckinTime { get; set; }
    [XmlElement("checkType")]
    public int CheckinType { get; set; }
    [XmlElement("notes")]
    public string Notes { get; set; }
    [XmlElement("server")]
    public string Server { get; set; }
    [XmlArray("productCheckins")]
    [XmlArrayItem("wasCheckin", typeof(WASCheckin))]
    [XmlArrayItem("ihsCheckin", typeof(IHSCheckin))]
    public List<ProductCheckin> ProductCheckins { get; set; }
}

public class ProductCheckin
{
    [XmlElement("vendor")]
    public string Vendor { get; set; }
    [XmlElement("make")]
    public string Make { get; set; }
    [XmlElement("model")]
    public string Model { get; set; }
    [XmlElement("version")]
    public string Version { get; set; }
    [XmlElement("installLocation")]
    public string InstallLocation { get; set; }
    [XmlElement("is64Bit")]
    public bool Is64Bit { get; set; }
}

基本的に、エラーは is64Bit 要素に関連していると言いたいだけですが、XML を手動で解析する以外にそれを行う方法はまだ見ていません。

4

1 に答える 1

4

私はそれに同意する必要があります:

<is64Bit>false fds</is64Bit>

は有効な値ではありません:

[XmlElement("is64Bit")]
public bool Is64Bit { get; set; }

あなたはそれを次のように扱うことができますstring

[XmlElement("is64Bit")]
public string Is64Bit { get; set; }

後で個別に処理します。

于 2013-09-25T13:57:27.507 に答える