7

私は最近、RestSharp を使用して、XML を使用する REST サービスを利用し始めました。

これにより、XML からカスタム オブジェクトのコレクションへのオブジェクトの逆シリアル化が簡単になります。しかし、私の質問は、サービスに投稿するときに再シリアル化する最良の方法は何ですか?

LINQ-to-XML を使用して再シリアル化する必要がありますか? Serializeable属性とユーティリティ関数を使用してみましたSerializeToXmlが、そうするとRestSharpによって実行されるデシリアライズが壊れているようです。

4

4 に答える 4

4

私の状況は比較的単純ですが、属性を使用して必要なものをすべて取得することができました。たとえば、ダッシュを含むノードを逆シリアル化してから、同じノード名にシリアル化できるようにするには、次のようにしました。

[XmlElement(ElementName = "short-name")]
[SerializeAs(Name = "short-name")]
public string shortName { get; set; }

したがって、あなたの例では、シリアライゼーションは尊重しません[XmlElement("elementName")]。代わりに、 を使用する必要があります[SerializeAs(Name = "elementName")]

これは、RestSharp プロジェクトのテスト コードを調べて見つけました。

于 2012-05-23T19:39:28.693 に答える
3

RestSharp のソース コードを調べたところ、System.Xml.Serialization.XmlSerializernamedDotNetXmlSerializerのラッパーが実際に組み込まれていることがわかりました。デフォルトでは使用されていません。使用するには、次の行を追加するだけです。

var request = new RestRequest();
request.RequestFormat = RequestFormat.Xml;
request.XmlSerializer = new DotNetXmlSerializer();
request.AddBody(someObject);
于 2016-11-23T19:17:26.677 に答える
1

RestSharp はいくつかの基本的な XML シリアル化をサポートしており、必要に応じてオーバーライドできます。

var request = new RestRequest();
request.RequestFormat = RequestFormat.Xml;
request.XmlSerializer = new SuperXmlSerializer(); // optional override, implements ISerializer
request.AddBody(person); // object serialized to XML using current XML serializer
于 2011-07-19T21:57:53.517 に答える
1

最近のプロジェクトでは、XElement (System.Xml.Linq アセンブリから) を使用して手動で要求を作成しました。しかし、私が扱うプロパティはほんの一握りしかありませんでした。RestSharp は、サーバーからの大きな XML グラフ応答を逆シリアル化するという実際の問題を解決しました。

オブジェクト モデルが XML スキーマと似ていない場合は、別のオブジェクト モデルを作成し、それにマップする必要があります。これにより、何らかのライブラリを使用して自動的にシリアル化できるようになります。そのような状況では、手動でスキーマにマッピングする方がよい場合があります。

于 2011-07-19T21:25:14.377 に答える