Я запускаю сервер на хост-машине и клиенте с моего компьютера. Я сериализую xml, который я хочу отправить и отправить на сервер через TCP-соединение. На сервере я получаю xml и пытаюсь десериализовать его. Тем не менее, я получаю эту ошибку:Deserializing XML Over Tcp connection
There is an error in XML document (1, 1).
Я посмотрел на исключение, и я получил это внутреннее исключение: код
Data at the root level is invalid. Line 1, position 1.
Client сериализовать и отправить XML:
XmlSerializer xs = new XmlSerializer(typeof(BalanceInquiryReqType));
BalanceInquiryReqType req = new BalanceInquiryReqType();
req.loyaltyToken = "416600000003";
req.storeID = 400020;
req.transactionDateTime = DateTime.Now;
req.transactionID = "123";
using (TextWriter writer = new StringWriter(send))
{
xs.Serialize(writer, req);
}
Код сервера для десериализации xml:
byte[] buffer = new byte[512];
int bytesread = handler.Receive(buffer, SocketFlags.None);
String received = BitConverter.ToString(buffer);
XmlSerializer xs = new XmlSerializer(typeof(BalanceInquiryReqType));
BalanceInquiryReqType request = new BalanceInquiryReqType();
using (TextReader txt = new StringReader(received))
{
request = (TransReqType)xs.Deserialize(txt);
}
XML-я послал:
<?xml version="1.0" encoding="utf-16"?>
<BalanceInquiryReqType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<loyaltyToken>416600000003</loyaltyToken>
<storeID>400020</storeID>
<transactionDateTime>2014-01-15T14:40:02.4960937-05:00</transactionDateTime>
<transactionID>123</transactionID>
</BalanceInquiryReqType>
схему XML, которую я послал:
<xs:complexType name="BalanceInquiryReqType">
<xs:complexContent>
<xs:extension base="TransReqType" />
</xs:complexContent>
</xs:complexType>
Основание расширение:
<xs:complexType name="TransReqType">
<xs:sequence>
<xs:element minOccurs="1" maxOccurs="1" name="loyaltyToken" type="xs:string" />
<xs:element minOccurs="1" maxOccurs="1" name="storeID" type="xs:long" />
<xs:element minOccurs="1" maxOccurs="1" name="transactionDateTime" type="xs:dateTime" />
<xs:element minOccurs="1" maxOccurs="1" name="transactionID" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="cashierID" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="stan" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="terminalID" type="xs:string" />
</xs:sequence></xs:complexType>
Кто-нибудь есть какие-нибудь идеи, что это может быть? Я пробовал варианты читателей, например, используя MemoryStream, но я постоянно сталкивался с различными проблемами.
Ну, напишите XML, полученный сервером, в файл и посмотрите на него. Что ты видишь? (Не смотрите на отправляемый XML, но посмотрите на полученный XML-сервер!) – elgonzo
Просто отлаживайте свой код. По крайней мере, поместите Debug.Write здесь 'String received = BitConverter.ToString (buffer);' И прочитайте документы о * BitConverter.ToString *. 'received' ** не ** xml. –
Как вы пишете XML-документ в сокет? Я полагаю, 'send' является StringBuilder; если нет, то какой это тип? Вы пытались использовать 'Encoding.UTF8.GetString (buffer)' (или другое кодирование) вместо 'BitConverter.GetString (buffer)'? – Markus