3

C#のデータコントラクトシリアライザーによって生成された次のXMLが、Windowsでは正常に機能するのにLinux on Monoでは機能しない理由を誰かが知っていますか?

XML:

<Message i:type="UserMessage" xmlns="http://schemas.datacontract.org/2004/07/NetTunnel"
xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><type>UserMessage</type>
<nick>Unnamed</nick><services><Service><enabled>true</enabled><port_ranges i:nil="true"/>
<service_name>vent</service_name></Service></services><state>Created</state>
<userid>1</userid></Message>

エラー:

Unhandled Exception: System.Runtime.Serialization.SerializationException: Deserializing 
type 'System.Object'. Expecting state 'EndElement'. Encountered state 'Element' with 
name 'enabled' with namespace 'http://schemas.datacontract.org/2004/07/NetTunnel'.

リストされているサービスがない場合にもエラーが発生します(xmlタグ<services/>)。services変数のタイプはList<Service>。これはMonoでは処理できないタイプですか?別のタイプがより適切でしょうか?それともまったく別のものですか?

4

3 に答える 3

2

あなたが望む答えではありませんが、.Netとは異なるMonoでのすべての動作は、Monoのバグを知っているすべてのものです。特にそれが本当に小さくて再現しやすい場合は、ファイルしてください(!) 。ここでそれを議論することは同じくらい速く役​​立つかもしれません、しかし次の人は同じ問題に遭遇するかもしれません、問題を研究する必要があるなど。

それを提出するだけで、Monoの人たちは素晴らしく、もっと役立つでしょう。他の人の検索を支援するために:問題へのリンクで投稿を更新することをお勧めします。

最後の質問について:Monoが逆シリアル化する必要があるかもしれないという理由だけで、タイプを変更する必要はありません-そしてListは問題ありません。

于 2010-02-20T23:06:50.180 に答える
1

コメントから、WCFは必要なく、データを共有したいだけです。その場合、私はprotobuf-netを調べます。私は(私が著者であるため)かなり偏見がありますが、(ソース付きで)無料なので、自己利益からそれをお勧めしません。単に; これは、Googleの「プロトコルバッファ」データ形式をモデルにした高速でポータブルなシリアル化APIです。処理が非常に高速で(通常、たとえばxmlよりもはるかに高速)、ネットワーク上ではかなり小さいです。

すでにデータコントラクトを使用している場合は、一意の値を追加するだけで微調整できる場合がありOrderます(これは数値識別子として使用されます)。

[DataContract]
public class Foo {
    [DataMember(Order = 1)]
    public int Id {get;set;}

    [DataMember(Order = 2)]
    public string Name {get;set;}
}

(または、特定のprotobuf-net属性を使用できます)

完全なソースが利用可能であり、Mono、通常の.NET、CFなどで動作します。

于 2010-02-21T19:52:18.937 に答える
0

ここにバグレポートを送信しました:https ://bugzilla.novell.com/show_bug.cgi?id = 581611

ただし、これが修正されるまで、代替案を知っておくとよいでしょう。

于 2010-02-21T02:08:45.147 に答える