Я пытаюсь реализовать некоторые функции, которые будут преобразовывать один объект в другой с помощью XslCompiledTransform.
Я нашел несколько реализаций для сериализации объекта в XML-строку и де-сериализации XML-строки в объект.
Другая функция выполняет XslCompiledTransform от object1 до obejbct2.
Для создания файла XSLT я использовал Altova MapForce, просто загрузил XML сериализованных объектов и сопоставил некоторые атрибуты.
Теперь о проблемах:
- Сначала я заметил, что XslCompiledTransform не работает с XSLT версии 2.0. есть ли какие-нибудь новые функции, которые работают с XSLT 2.0? может какие настройки?
- во-вторых, я получаю исключение при попытке DeSerialize XML для объекта: «Произошла ошибка десериализации объекта типа myObject. Входная строка была в неправильном формате». Я не понимаю, в чем проблема. У кого-нибудь есть образец кода, который делает такое? все, что я нахожу в Google, - это преобразования HTML-кода, а не объекты.
Вот функции:
private static string runXSLT(string xsltFile, string inputXML)
{
XmlDocument XmlDoc = new XmlDocument();
// Load the style sheet.
XslCompiledTransform xslt = new XslCompiledTransform(true);
xslt.Load(xsltFile);
StringReader StrReader = new StringReader(inputXML);
XmlTextReader XmlReader = new XmlTextReader(StrReader);
//Create an XmlTextWriter which outputs to memory stream
Stream stream = new MemoryStream();
XmlWriter writer = new XmlTextWriter(stream, Encoding.UTF8);
// Execute the transform and output the results to a file.
xslt.Transform(XmlReader, writer);
stream.Position = 0;
XmlDoc.Load(stream);
return XmlDoc.InnerXml;
}
public static string SerializeAnObject(object AnObject)
{
XmlDocument XmlDoc = new XmlDocument();
DataContractSerializer xmlDataContractSerializer = new DataContractSerializer(AnObject.GetType());
MemoryStream MemStream = new MemoryStream();
try
{
xmlDataContractSerializer.WriteObject(MemStream, AnObject);
MemStream.Position = 0;
XmlDoc.Load(MemStream);
return XmlDoc.InnerXml;
}
finally
{
MemStream.Close();
}
}
public static Object DeSerializeAnObject(string XmlOfAnObject, Type ObjectType)
{
StringReader StrReader = new StringReader(XmlOfAnObject);
DataContractSerializer xmlDataContractSerializer = new DataContractSerializer(ObjectType);
XmlTextReader XmlReader = new XmlTextReader(StrReader);
try
{
Object AnObject = xmlDataContractSerializer.ReadObject(XmlReader);
return AnObject;
}
finally
{
XmlReader.Close();
StrReader.Close();
}
}
Спасибо большое,
Омри.