2013-09-26 2 views
1

В прошлом мой FetchXML доставлял мне результат в формате xml, но поскольку я меняю сервер, эта функция string ret = service.Fetch(fetchXml); больше не работает, поэтому мне пришлось прибегнуть к другому решению, но это дает мне больше работы по созданию XML-файла.Как получить результат FetchXML как XML, а не сущностей?

Fetch Строка пример:

string fetchXml = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'> 
     <entity name='account'> 
     <attribute name='name'/> 
     <attribute name='telephone1'/> 
     </entity> 
     </fetch>"; 

     EntityCollection ec = organizationProxy.RetrieveMultiple(new FetchExpression(fetchXml)); 


     XElement rootXml = new XElement("account"); 
     foreach (Entity account in ec.Entities) 
     { 
      if (account.Attributes.Contains("name")) 
      { 
       rootXml.Add(new XElement("name", account.Attributes.Contains("name") ? account["name"] : "")); 
       rootXml.Add(new XElement("telephone1", account.Attributes.Contains("telephone1") ? account["telephone1"] : "")); 
      } 
     } 

     res.XmlContent = rootXml.ToString(); 

Так что я здесь делаю, это построить строку XML вручную, и я знаю, что CRM может обеспечить результат в XML, я googleit (http://social.msdn.microsoft.com/Forums/en-US/af4f0251-7306-4d76-863d-9508d88c1b68/dynamic-crm-2011-fetchxml-results-into-xmltextreader-to-build-an-xml-output) Но это дайте мне больше работы, чем мой код. Или другого решения нет?

ответ

1

В прошлом я использовал сериализацию для преобразования объектов в XML и обратно.

Чтобы преобразовать в XML

 public static string SerializeAnObject(object _object) 
     { 
      System.Xml.XmlDocument doc = new XmlDocument(); 
      System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(_object.GetType()); 
      System.IO.MemoryStream stream = new System.IO.MemoryStream(); 
      try 
      { 
       serializer.Serialize(stream, _object); 
       stream.Position = 0; 
       doc.Load(stream); 
       return doc.InnerXml; 
      } 
      catch (Exception ex) 
      { 
       throw; 
      } 
      finally 
      { 
       stream.Close(); 
       stream.Dispose(); 
      } 
     } 

Чтобы преобразовать его обратно в коллекцию сущностей (или другой объект)

 public static object DeSerializeAnObject(string xmlOfAnObject, Type _objectType) 
     { 
      System.IO.StringReader read = new StringReader(xmlOfAnObject); 
      System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(_objectType); 
      System.Xml.XmlReader reader = new XmlTextReader(read); 
      try 
      { 
       return (object)serializer.Deserialize(reader); 
      } 
      catch (Exception ex) 
      { 
       throw; 
      } 
      finally 
      { 
       read.Close(); 
       read.Dispose(); 
       read = null; 
      } 
     } 
Смежные вопросы