在 CRM 在线插件中序列化 "Entity" 类型的对象
Serialize Objects of type "Entity" in CRM Online Plugin
我要解决的问题是,我需要将实体的 Target/Pre/Post-Image 序列化为 json 字符串。我知道我们不能在插件中包含 nuget 库,因为 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.Generic.KeyValuePair`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Object, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]' 无法在部分信任中序列化,因为成员 'key' 不是 public。'
据我所知,我们无法在 CRM 中序列化实体。
充其量您可以创建一个数据合同 class 并获取集合成员,然后序列化实体。但这同样需要大量的手动工作。
查看以下 2 个主题,它们提供了有关您的问题的更多信息。
如果您使用 NuGet 的 Source.DLaB.Xrm 库,它包含一个 SerializableEntity class,旨在允许在沙盒插件中进行 Xml 序列化。您应该也可以在此处将其用于您的 JSON:
Serialize(new Source.DLaB.Xrm.Sandbox.Serialization.SerializableEntity(yourSdkEntity))
Source.DLaB.Xrm 包是一个只有源代码的 NuGet 包,所以你不需要 ILMerge 任何东西。
我要解决的问题是,我需要将实体的 Target/Pre/Post-Image 序列化为 json 字符串。我知道我们不能在插件中包含 nuget 库,因为 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.Generic.KeyValuePair`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Object, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]' 无法在部分信任中序列化,因为成员 'key' 不是 public。'
据我所知,我们无法在 CRM 中序列化实体。
充其量您可以创建一个数据合同 class 并获取集合成员,然后序列化实体。但这同样需要大量的手动工作。
查看以下 2 个主题,它们提供了有关您的问题的更多信息。
如果您使用 NuGet 的 Source.DLaB.Xrm 库,它包含一个 SerializableEntity class,旨在允许在沙盒插件中进行 Xml 序列化。您应该也可以在此处将其用于您的 JSON:
Serialize(new Source.DLaB.Xrm.Sandbox.Serialization.SerializableEntity(yourSdkEntity))
Source.DLaB.Xrm 包是一个只有源代码的 NuGet 包,所以你不需要 ILMerge 任何东西。