Сериализация объектов типа "Сущность" в онлайн-плагине CRM - PullRequest
0 голосов
/ 30 апреля 2020

Проблема, которую я пытаюсь решить, заключается в том, что мне нужно сериализовать объект / пре / пост-образ объекта в строку json. Я знаю, что мы не можем включать библиотеки плагинов в плагины, так как ILmerge не подходит. Это то, что я попробовал:

var jStr = Serialize((Entity)excutionContext.InputParameters["Target"]);

public static string Serialize<TEntity>(TEntity dataObject)
{
    using (var stream = new MemoryStream())
    {
         var serializer = new DataContractJsonSerializer(typeof(TEntity));
         serializer.WriteObject(stream, dataObject);
         return Encoding.UTF8.GetString(stream.ToArray());
    }
}

Но я получаю следующее исключение и не могу понять, что мне делать, чтобы решить то же самое:

System.Security.SecurityException: ' Тип контракта данных 'System.Collections.Generi c .KeyValuePair`2 [[System.String, mscorlib, Версия = 4.0.0.0, Культура = нейтральный, PublicKeyToken = b77a5c561934e089], [System.Object, mscorlib, Версия = 4.0 .0.0, Culture = нейтральный, PublicKeyToken = b77a5c561934e089]] 'не может быть сериализован при частичном доверии, потому что элемент' key 'не опубликован c.'

Ответы [ 3 ]

1 голос
/ 30 апреля 2020

Насколько я знаю, мы не можем сериализовать Entity в CRM.

В лучшем случае вы можете создать класс datacontract с его членами get set, а затем сериализовать Entity. Но опять же, это будет много ручной работы.

Посмотрите на 2 темы, которые дают больше информации о вашей проблеме.

Тема 1

Тема 2

0 голосов
/ 07 мая 2020

Как и во всех проведенных исследованиях / испытаниях, представляется невозможным сериализовать объект самого типа сущности в среде Sandbox в D365.

Закончилось создание создания обходного пути путем создания публикуемых c классов со свойствами и сопоставления необходимых мне элементов из сущности, а затем с помощью DataContractJsonSerializer для сериализации объекта пользовательского класса и того же класса для интерпретации (десериализации). сущность обратно.

0 голосов
/ 30 апреля 2020

Если вы используете библиотеку Source.DLaB.Xrm из NuGet, она содержит класс SerializableEntity, разработанный для обеспечения Xml сериализации в плагинах песочницы. Здесь вы также сможете использовать его для JSON:

Serialize(new Source.DLaB.Xrm.Sandbox.Serialization.SerializableEntity(yourSdkEntity))

Пакет Source.DLaB.Xrm является пакетом NuGet только для исходного кода, поэтому вам не нужно ничего ILMerge.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...