DataContractSerializer を使用すると、異常な動作が見られます。次のようにメッセージ コントラクトを定義しました。
namespace MyNamespace.DataContracts
{
[MessageContract(WrapperName = "order", WrapperNamespace = @"http://example.com/v1/order")]
public class MyOrder
{
[MessageBodyMember(Namespace = @"http://example.com/v1/order", Order = 1)]
public MyStore store;
[MessageBodyMember(Namespace = @"http://example.com/v1/order", Order = 2)]
public MyOrderHeader orderHeader;
[MessageBodyMember(Namespace = @"http://example.com/v1/order", Order = 3)]
public List<MyPayment> payments;
[MessageBodyMember(Namespace = @"http://example.com/v1/order", Order = 4)]
public List<MyShipment> shipments;
}
.
.
次のような XML メッセージを送信しています。
<?xml version="1.0" encoding="utf-8"?>
<order xmlns="http://example.com/v1/order>
<store>
...
</store>
<orderHeader>
...
</orderHeader>
<payments>
<payment>
...
</payment>
</payments>
<shipments>
<shipment>
...
</shipment>
</shipments>
</order>
私のサービスは、期待どおりにこの XML を逆シリアル化します。私のサービス内では、DataContractSerializer を使用して XML 文字列を作成していますが、ここで奇妙なことが起こります。私は次のようにシリアライザーを使用しています:
DataContractSerializer serializer = new DataContractSerializer(typeof(MyOrder));
using (MemoryStream ms = new MemoryStream())
{
serializer.WriteObject(ms, order);
ms.Position = 0;
StreamReader sr = new StreamReader(ms);
string outputMessage = sr.ReadToEnd();
}
これが完了すると、outputMessage に次の XML が含まれます。
<?xml version="1.0" encoding="utf-8"?>
<MyOrder xmlns="http://example.com/v1/order" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<order>
<store>
...
</store>
<orderHeader>
...
</orderHeader>
<payments>
<payment>
...
</payment>
</payments>
<shipments>
<shipment>
...
</shipment>
</shipments>
</order>
</MyOrder>
言うまでもなく、元の XML メッセージを受信することを期待しているものは、これを解析できません。だから私は2つの質問があると思います:
- DataContractSerializer が余分な外部ノードを XML 出力に追加するのはなぜですか?
- これをやめる方法はありますか?
ありがとう。
これはおそらく.NET 4を使用していることを追加する必要があります。