私はヘルパーメソッドを使用してオブジェクトをシリアライズします。このメソッドは、エンコーディングを変更しようとするまで動作します。コンシューマーWebサービスが受け取ったときに、いくつかの奇妙な文字で間違っているようです。期待どおりXML(UTF-8)にシリアル化されていないオブジェクト.net?
ここでアプリからのログエントリが
UTF-16(これは動作します)、次のとおりです。私は
2011-08-09 11:21:30,687 DEBUG SomeRestfulService * xmlData <?xml version="1.0" encoding="utf-8"?><loginRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><UserName>Admin</UserName><Password>Password</Password><MarketCode>GB</MarketCode></loginRequest>
:
2011-08-09 11:16:03,140 DEBUG SomeRestfulService * xmlData <?xml version="1.0" encoding="utf-8"?>
<loginRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<UserName>Admin</UserName>
<Password>Password</Password>
<MarketCode>GB</MarketCode>
</loginRequest>
UTF-8(変な文字に注意してください)それがなぜレイアウトを失ったのかわからない。
ヘルパーメソッド:
Public Shared Function SerializeObject(ByVal obj As Object, ByVal encoding As Text.Encoding) As String
Dim serializer As New XmlSerializer(obj.GetType)
If encoding Is Nothing Then
Using strWriter As New IO.StringWriter()
serializer.Serialize(strWriter, obj)
Return strWriter.ToString
End Using
Else
Using stream As New IO.MemoryStream, xtWriter As New Xml.XmlTextWriter(stream, encoding)
serializer.Serialize(xtWriter, obj)
Return encoding.GetString(stream.ToArray())
End Using
End If
End Function
注:私は何としてエンコーディングを渡した場合は、デフォルトのエンコーディングはUTF-16である、すべてはもともと私は符号化部がなかった、okですが、それは必要条件であるので、そこにいる必要があります。
UTF-8にエンコードするときにシリアライズを間違って実行していますか?これをどうすれば解決できますか?
私はBOMを省略し、以下を試してみましたが、それでも同じ問題います
Dim utf8 As New Text.UTF8Encoding(True)
Using stream As New IO.MemoryStream, xtWriter As New Xml.XmlTextWriter(stream, utf8)
serializer.Serialize(xtWriter, obj)
Return utf8.GetString(stream.ToArray())
End Using
あなたのutf16バージョンも悪いです。 BOMが見えないので、それを見ることはできません。 –
@ハンス、UTF-16が動作します。 –