2

リクエストとレスポンスを定義する事前定義されたxmlサンプルがありますが、操作できない部分ServiceStack.Text.XmlSerializerは次のスニペットだけです。これは基本的に文字列のリストです。

<user>
....
    <EmailPreferences> 
        <EmailProgram>Newsletter</EmailProgram> 
        <EmailProgram>Coupons</EmailProgram> 
    </EmailPreferences> 

例「Structsを使用してJSONをカスタマイズする」を使用してみましたが、タイトルが示すように、xmlのシリアル化には影響しませんでした。

4

1 に答える 1

3

ServiceStackは、内部で.NETのXMLDataContractSerializerを使用します。したがって、モデルをサポートするカスタマイズで装飾することができます。したがって、上記のようなものを取得するには、次のようにすることができます。

[CollectionDataContract(Name="EmailPreferences", ItemName="EmailProgram")]
public class EmailPreferences : List<string>
{
    public EmailPreferences() { }
    public EmailPreferences(IEnumerable<string> collection) : base(collection){}
}

グローバルXML名前空間

各DataContractに名前空間を個別に追加することもできますが、代わりにすべてのDTOに同じ名前空間を共有させることをお勧めします。これにより、自動生成された繰り返しの名前空間がXMLに表示されなくなります。

ResponseStatus DTOはすでにhttp://schemas.servicestack.net/types名前空間の下にあるので、名前空間が何であるかを気にしない場合は、そのままにしておきます。

すべてのDataContractを同じ名前空間の下に置く最も簡単な方法は、DTOが含まれる各C#名前空間のAssemblyInfo.csにこれらのアセンブリ全体の属性を配置することです。

[assembly: ContractNamespace("http://schemas.servicestack.net/types",  
    ClrNamespace = "ServiceStack.Examples.ServiceModel.Operations")]
[assembly: ContractNamespace("http://schemas.servicestack.net/types",  
   ClrNamespace = "ServiceStack.Examples.ServiceModel.Types")]
于 2012-07-26T05:50:13.760 に答える