1

以前は、FetchXML が結果を xml 形式で提供していましたが、サーバーを変更したため、この機能が機能string ret = service.Fetch(fetchXml);しなくなったため、別のソリューションに頼る必要がありましたが、これにより XML ファイルを作成する作業が増えました。

フェッチ文字列の例:

 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 で提供できることはわかっています。 -7306-4d76-863d-9508d88c1b68/dynamic-crm-2011-fetchxml-results-into-xmltextreader-to-build-an-xml-output )しかし、これにより、コードよりも多くの作業が可能になります。それとも他に解決策はありませんか?

4

1 に答える 1

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;
            }
        }
于 2013-09-29T22:21:35.480 に答える