Я попытался сериализовать назначение в JSON в пользовательском действии.Сериализация JSON Dynamics CRM
Вот класс для Назначения:
//<summary>
// Commitment representing a time interval with start/end times and duration.
// </summary>
//
[System.Runtime.Serialization.DataContractAttribute()]
[Microsoft.Xrm.Sdk.Client.EntityLogicalNameAttribute("appointment")]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "7.1.0001.3108")]
public partial class Appointment : Microsoft.Xrm.Sdk.Entity, System.ComponentModel.INotifyPropertyChanging, System.ComponentModel.INotifyPropertyChanged
{
// <summary>
// Default Constructor.
// </summary>
public Appointment() :
base(EntityLogicalName)
{
}
public const string EntityLogicalName = "appointment";
public const int EntityTypeCode = 4201;
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
public event System.ComponentModel.PropertyChangingEventHandler PropertyChanging;
private void OnPropertyChanged(string propertyName)
{
if ((this.PropertyChanged != null))
{
this.PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
}
}
....
А вот код сериализации:
Entity entity = (Entity) context.InputParameters["Target"];
ColumnSet csAll = new ColumnSet(true);
Appointment appointment = (Appointment) service.Retrieve(entity.LogicalName, entity.Id, csAll);
System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(Appointment));
MemoryStream ms = new MemoryStream();
serializer.WriteObject(ms, appointment);
string jsonNotification = Encoding.Default.GetString(ms.ToArray());
И когда активность исполняется, у меня есть следующее сообщение об ошибке:
Неожиданное исключение из плагина (Выполнение): SmartwatchMeeting_PushGCM.SmartwatchMeeting: System.Security.SecurityException: Тип контракта данных «System.Collections.Generic.KeyValuePair`2 [[System.String, mscorlib, Version = 4.0.0.0, культура = нейтральной, PublicKeyToken = b77a5csadsad089], [System. Объект, mscorlib, Version = 4.0.0.0, культура = нейтральной, PublicKeyToken = b77a5csadsad089]]» не может быть сериализовать в режиме частичного доверия, так как член 'ключ' не общественного
Я не понимаю, что Я должен добавить, чтобы он работал?
Спасибо за вашу помощь
Я нахожусь в Dynamics CRM Online, так что это будет вторая альтернатива. Нужно ли мне редактировать класс, созданный CrmSvcUtil? Эта строка [System.Runtime.Serialization.DataContractAttribute()] не разрешает сериализацию? Спасибо – bidou88
Я уверен, что изменение автоматически сгенерированного кода сломает его, но я никогда не использую его, поэтому я не могу сказать точно. То, что я предлагаю, является обычным классом оболочки. – Alex
Хорошо, спасибо. Дело в том, что я хочу сериализовать весь объект Appointment, который довольно велик. Что вы думаете об использовании Newtonsoft.Json.dll и объединить его после сборки? – bidou88