0

Flex によって消費される .NET Web サービスで、非常に奇妙な問題が発生しています。

[XmlAttribute('xxx')] 属性を持つプロパティ以外の何もない非常に単純なクラスがあります。

public class OrderAddress
{
    public OrderAddress() {}

    [XmlAttribute("firstName")]
    public string FirstName { get; set; }

    [XmlAttribute("lastName")]
    public string LastName { get; set; }

    [XmlAttribute("company")]
    public string Company { get; set; }        

    [XmlAttribute("address1")]
    public string Address1 { get; set; }

    ... (more properties)
}

問題は、Flex でこのオブジェクトがデシリアライズされると、デバッガーで EVERY SINGLE フィールドが null になることです。OrderAddress クラスのインスタンスは null ではなく、すべてのフィールドです。Web サービス プロキシ レイヤーが最新であることを 100% 確信しており、Fiddlerで示されているように、100% 確実にデータが送信されています。

非常に奇妙なことは、これらのプロパティの 1 つを (XmlAttribute ではなく) 要素としてシリアル化するように変更し、C# Web サービスのみを再コンパイルすると、データが Flex によって即座に認識されることです。完全に未使用のフィールドを追加するとpublic string Foo = "foo";、それも突然機能します。

以前にこのようなものを見たのは覚えていますが、うまく修正できたかどうかは覚えていません。

私にとっては午前 3 時 30 分であり、ハードコアなトラブルシューティングを延期する必要がありますが、読んでいる人に明らかな場合に備えて、これをここに捨てます。コードはモジュール内にあり、それが時々おかしなことを引き起こす可能性があることを私は知っていますが、これは非常におかしなことのようです。

4

2 に答える 2

1

3 日間の苦労の末、ようやくこの XML 属性が問題の原因であることがわかりました。あなたのものとは少し異なりますが、私のクラスには XML 属性に加えてオブジェクトの配列があります。Flex はプロキシを生成でき、属性を正​​しく取得することさえできましたが (プロパティとして扱われました)、XML 要素 (Web サービスから返された) をオブジェクトの配列にデシリアライズできませんでした。その属性を削除すると、すべてが正常に機能しました...そうです、これは「要素中心のXMLシリアライゼーション」です。しかし、それを回避する方法はありますか?

于 2010-04-08T14:25:18.830 に答える
0

要素中心の XML は、XML シリアライゼーションでより相互運用可能な形式です。これが、新しい WCF DataContract シリアライザーがすべてのプロパティを属性ではなく要素としてシリアル化する理由です。私にとっての属性は、要素のデータではなく、要素の記述子です。

于 2008-10-26T10:57:47.470 に答える