既存のwcfrestapiをServiceStackに変換しようとしていますが、すぐに問題が発生します。
[Route("foo/{userId}","POST")]
public class MyInputModel : IReturnVoid
{
public string userId { get; set; }
public SomeOtherObject properties { get; set; }
}
ここでの目的は、URLにuserIdを指定し、投稿本文にSomeOtherObjectのインスタンスを指定することです。私が得るエラーは
<Message>Could not deserialize 'application/xml' request using MyInputModel'
Error: System.Runtime.Serialization.SerializationException:
Error in line 1 position 42. Expecting element 'MyInputModel'
from namespace 'blahblahblah'.. Encountered 'Element' with name
'SomeOtherObject', namespace 'http://blahblahblah'.
私が考えることができる唯一のことは、シリアライザーをMyInputModel
幸せにするためにxmlをaでラップすることです。これは、実際には下位互換性のためのオプションではありません。
SomeOtherObject
トップレベルの入力モデルになるように変更してUserId
、そこにプロパティを配置することもできますが、これはAPI全体で使用されるオブジェクトであり、実際にはユーザーIDに関連付けられていないため、最適ではないと感じます。また、すでに独立して公開されているため、そこで変更を加えるのは面倒です。
投稿されたデータのルート要素が挿入されることを示す方法はありますSomeOtherObject
かMyInputModel
?WebApiでは、これは[FromBody]
属性などを使用します。servicestackに似たようなものはありますか?