Я создал прокси-классы службы wcf с ссылкой на службу «visual studio» и я могу связаться с сервисом. Одна из служебных операций возвращает сжатую строку в байте [], которая представляет список элементов.Невозможно десериализовать список объектов с помощью XmlSerializer
ПРОБЛЕМА: я могу распаковать байт [], я могу получить xml из десериализованного байта [], но я НЕ МОЖЕТ десериализовать объекты, я получаю список объектов с пустыми значениями.
здесь XML-строка, я получить от декомпрессии
<?xml version="1.0"?>
<ArrayOfItem xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Item>
...
<FieldX>
..
</FieldX>
</Item>
</ArrayOfItem>
ArrayOfItem не класс ... но Деталь:
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.34234")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://company.com/")]
public partial class Item: BaseObjectModel {
private bool FieldX;
[System.Xml.Serialization.XmlElementAttribute(Order=0)]
public bool FieldX{
get {
return this.FieldX;
}
set {
this.FieldX= value;
this.RaisePropertyChanged("FieldX");
}
}
}
Моего код
List<Item> lista = null;
MemoryStream InStream = new MemoryStream(byteData);
GZipStream gzDecompressed = new GZipStream(InStream, CompressionMode.Decompress, true);
MemoryStream OutStream = new MemoryStream();
//Retrieve the size of the decompressed file from the compressed footer
byte[] bufferWrite = new byte[4];
InStream.Position = (int)InStream.Length - 4;
InStream.Read(bufferWrite, 0, 4);
InStream.Position = 0;
//Convert to int for using in declaring our Byte[] size
int bufferLength = BitConverter.ToInt32(bufferWrite, 0);
//1MB Buffer
byte[] buffer = new byte[1024 * 1024];
while (true)
{
int bytesRead = gzDecompressed.Read(buffer, 0, buffer.Length);
// If we reached the end of the data
if (bytesRead == 0) break;
OutStream.Write(buffer, 0, bytesRead);
}
// Close the streams
InStream.Close();
gzDecompressed.Close();
OutStream.Position = 0;
var sr = new StreamReader(OutStream);
string myStr = sr.ReadToEnd();
OutStream.Position = 0;
XmlSerializer serializer = new XmlSerializer(typeof(List<Item>));
XmlReader read = XmlReader.Create(OutStream);
List<Item> lista2 = (List<Item>)serializer.Deserialize(read);
Строка это только для того, чтобы узнать, что дает служба, я использую поток памяти для десериализации.
получить список с правильным номером пункта, но каждый элемент имеет пустые свойства ....
Любая помощь приветствуется, спасибо.
EDIT
Я попытался сериализации список с помощью объекта Item прокси и я вижу, что XML имеет кодировку
XML-от службы
<?xml version="1.0"?><ArrayOfItem xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><Item>...
XML-сериализованная мной
<?xml version="1.0" encoding="utf-16"?><ArrayOfItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><Item xmls="company.com">
Хорошо, я сделал это, я обновил сообщение – Alessandro