0

XmlSerializerASP.NET Web API プロジェクトの代わりに使用しDataContractSerializerており、戻りオブジェクトを次のように定義しています。

応答オブジェクト

public class MyResponse 
{
   public string Name {get;set;}

   public CustomField<string> Username {get;set;}

   public CustomField<float?> Score {get;set;}
}

カスタムフィールド

public class CustomField<T>
{
    public T Value {get;set;}

    public long LastModified {get;set;}

}

次のように XML 応答を生成したい

<MyResponse>
 <FirstName>ABC</FirstName>
 <Username lastModified="1234">XYZ</Username>
 <Score lastModified="45678">12002</Score>
</MyResponse>

ASP.NET Web API は、CustomFieldクラスを

public class CustomField<T>
{
    [XmlText]
    public T Value {get;set;}

    [XmlAttribute]
    public long LastModified {get;set;}
}

目的の XML 応答を取得するにはどうすればよいですか?

4

1 に答える 1

0

わかりました、私は何が起こっているのか知っていると思います。

走ろうとすると

new XmlSerializer(typeof(MyResponse))

次のエラーが表示されます。

System.InvalidOperationException: System.Nullable`1[System.Single] 型のメンバー 'Value' をシリアル化できません。XmlAttribute/XmlText を使用して複合型をエンコードすることはできません。

問題は、タイプ「float?」のフィールドがあることです。[XmlText]として。[XmlText] はプリミティブにしか適用できず、XmlSerializer が「float?」を認識していないようです。プリミティブとして。「float?」の代わりに「float」を使用すると、すべてが正しく機能しているように見えます。Score がない場合があることを示したい場合は、Score の値を null にする代わりに、Score を null に設定することをお勧めします。

それが役立つことを願っています。

于 2013-01-14T01:24:12.047 に答える