2015-10-08 4 views
3

Я разрабатываю плагин для Dynamics 2015. Плагин требует некоторой информации об установке, которая, как я думал, будет хорошей идеей использовать объект json в незащищенной конфигурации. Кроме того, есть внешняя система, которая записывает некоторый json в поле в сущности, на которую отвечает этот плагин, на который мне нужно извлечь информацию.Сериализация/десериализация JSON в динамике CRM 2013/2015 Плагин

Я попытался использовать объект JavascriptSerializer для десериализации json, но я получаю System.MethodAccessException, после выполнения некоторых исследований я обнаружил, что я не могу использовать JavascriptSerializer в режиме песочницы.

Я не хочу, чтобы ILMerge Json.Net в мою сборку, так есть ли другой способ, которым я могу сериализовать/десериализовать json в моем коде плагина?

+1

Вы пробовали ['DataContractJsonSerializer'] (https://msdn.microsoft.com/en-us/library/system.runtime.serialization.json.datacontractjsonserializer%28v=vs.110%29.aspx)? Сериализаторы данных могут использоваться в режиме частичного доверия в соответствии с [Типы, поддерживаемые сериализатором контрактов данных] (https://msdn.microsoft.com/en-us/library/ms731923%28v=vs.110%29. aspx), хотя и с некоторыми ограничениями. – dbc

+0

Почему бы не использовать XML? –

+0

@JamesWood, я не большой поклонник XML, особенно там, где есть альтернатива JSON, и в наши дни, как правило, есть. –

ответ

2

Так вот как я решил эту одну

Учитывая

string wsData = string.Empty; 
plItem.GetType() == typeof(CategoryInfo); 

и

[DataContract] 
public class CategoryInfo{ 
    [DataMember] 
    public string AllPropertiesToSerialize{ get; set; } 
} 

затем

using (var ms = new MemoryStream()) 
{ 
    var js = new DataContractJsonSerializer(typeof(CategoryInfo)); 
    js.WriteObject(ms, plItem); 
    ms.Position = 0; 
    var sr = new StreamReader(ms); 
    wsData = sr.ReadToEnd(); 
} 

Благодарности к @dbc и @Guido Preite для указателей

Смежные вопросы