0

こんにちは私はトピックからメッセージを取得するときに私のサービスバスから私の仲介されたメッセージコンテンツに特別な名前空間を取得するのだろうかと思っていました。どうすれば削除できますか?不明なxmlシリアル化のコンテンツ/名前空間がサービスバスから仲介されたメッセージ

I(私Azureの機能では)サービスバスからメッセージを取得しようとすると、私はすべて以上の上にこれを取得、私のXMLを持っている、とは私のルートノードの前に言った:

@string3http://schemas.microsoft.com/2003/10/Serialization/�� 
    <rootNode>...</rootNode> 

FYI
string BrokeredMessageBody = mySbMsg.GetBody<string>(); 

:アズールのXMLは大丈夫に見える機能が、私のロジックアプリはそれを取得するとき、それは何らかの形で、上記のように名前空間を追加し、私はこのようにそれを行う私の紺碧の機能の私のservicebusから仲介メッセージを取得します指定された前/上。

誰でもこれまでに遭遇したことはありますか?

答えて

0

私の推測では、これはあなたがあなたのメッセージを送信する方法であることを次のようになります。そのまま

string content = "My message"; 
var message = new BrokeredMessage(content); 

しかし、これはあなたのコンテンツを送信しません。

public BrokeredMessage(object serializableObject) 

をし、それはありません:あなたは、実際にこのコンストラクタのオーバーロードを使用している

はバイナリ XmlDictionaryWriterとDataContractSerializerを使用して、特定 オブジェクトからBrokeredMessageクラスの新しいインスタンスを初期化します。

したがって、文字列はXMLにシリアル化され、バイナリ形式でフォーマットされます。これは、メッセージの内容(名前空間と一部の非可読性文字)に表示されます。

mySbMsg.GetBody<string>();が逆の動作をするため、Azure関数が正常に動作します。バイナリXMLからメッセージを非直列化します。あなた自身をコードする文字列(UTF-8私の例では)を定義

string content = "My message"; 
var message = new BrokeredMessage(new MemoryStream(Encoding.UTF8.GetBytes(content)), true); 

注:

-であるなどのコンテンツをシリアル化するために、あなたはStreamベースのコンストラクタのオーバーロードを使用する必要があります。

読書もより複雑なビットを取得します。

using (var stream = message.GetBody<Stream>()) 
using (var streamReader = new StreamReader(stream, Encoding.UTF8)) 
{ 
    content = streamReader.ReadToEnd(); 
} 
関連する問題