xmlに名前空間が含まれている場合、ServiceStack xmlの逆シリアル化が動作する最も簡単な方法です。しかし、私が受け取るXMLには名前空間が含まれていません。最も単純な使用例:XMLデシリアライズはxmlのネームスペースでしか機能しません
[Serializable]
public class test
{
}
class Program
{
static void Main(string[] args)
{
string xml="<test xmlns=\"http://schemas.datacontract.org/2004/07/\"></test>";
var result = ServiceStack.Text.XmlSerializer.DeserializeFromString<test>(xml);
}
}
しかし、それは私が望むものではありません。それは、私はいくつかのサービスから入手xmlですので、私は、次のようにデシリアライズしたい:
string xml="<test></test>";
しかし、それは私に次のエラーを与える:
DeserializeDataContract: Error converting type: Error in line 1 position 7.
Expecting element 'test' from namespace
'http://schemas.datacontract.org/2004/07/'..
Encountered 'Element' with name 'test', namespace ''.
私が試した:
[Serializable]
[XmlRoot("test", Namespace = "")]
public class test
ServiceStack.Text.XmlSerializerは静的なので、新しいシリアライザを作成できません。 Microsoft XmlSerializerまたはServiceStackのいずれかを選択する必要があります(両方ではありません)。意味:この単純な例がうまくいかない場合は、ServiceStackパッケージの他の非常に有用な部分をスキップする必要があります。私が最後に望むのは、入ってくるxmlにダミーの名前空間を挿入することです。
ありがとうございました!それが私が必要としていた欠けているリンクでした!私は何とかServiceStackのためのこのような適切なドキュメントを見つけることができません... – user1154148
あなた自身のXMLデシリアライザを書かなかった何らかの理由はありますか?マイクロソフトでは、動作するJSONシリアライザ/デシリアライザとは異なり、このタイプのマジックソース設定が必要になるようです。 – JasonD
@JasonDええ、私は理由がないとNIHを好きではありません。私はXMLを使用したくないです。 MSのXML DCSはXMLにも非常に優れているため、必要とされる労力の面でほとんどメリットはありません。 – mythz