Я создал метод, который принимает объект, а затем пытается сериализовать объект в Xml, сначала используя XmlSerializer для сериализации в строку, а затем загрузить Xml обратно в объект XmlDocument для возврата метода.Код выглядит так:
public static XmlDocument ConvertObjectToXMLMessage(object ObjectToConvert)
{
MemoryStream stream = null;
XmlWriter writer = null;
XmlSerializer serializer = null;
XmlDocument xmlDoc = new XmlDocument();
UnicodeEncoding utf = new UnicodeEncoding();
UTF8Encoding utf8 = new UTF8Encoding();
ASCIIEncoding ascii = new ASCIIEncoding();
string result = string.Empty;
try
{
stream = new MemoryStream();
//writer = new StreamWriter(stream, Encoding.Unicode);
XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = Encoding.UTF8;
writer = XmlWriter.Create(stream, settings);
serializer = new XmlSerializer(ObjectToConvert.GetType());
serializer.Serialize(writer, ObjectToConvert);
int count = Convert.ToInt32(stream.Length);
Byte[] arr = new Byte[count];
stream.Seek(0, SeekOrigin.Begin);
stream.Read(arr, 0, count);
result = utf8.GetString(arr).Trim();
// if this is being used during a debug session, the xml will be written to the Debug Console
#if DEBUG
//blank line before
Debug.WriteLine(string.Empty);
// output result
Debug.Write(result);
//blank line after
Debug.WriteLine(string.Empty);
#endif
xmlDoc.LoadXml(result);
return xmlDoc;
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (writer != null)
writer.Close();
}
}
Все работает хорошо до команды xmlDoc.LoadXml (result).Это создает исключение;{"Данные на корневом уровне недействительны. Строка 1, позиция 1."}
Как видите, я объявил ряд переменных кодирования.Если я использую кодировку ASCII, это работает.Мне нужно использовать UTF8.
Есть идеи, почему это не работает?Я думаю, что это из-за ложных символов, вставляемых в начале XML-сериализации.Как мне избежать этого?Типы классов, которые я мог бы сериализовать, были бы объектными объектными структурами или классифицированными прокси, сгенерированными из XSD или WSDL.