C# 序列化通过SOAP发送的对象
我正在处理一些对Microsoft CRM的SOAP请求/响应,我正试图保存这些请求/响应。我试图序列化的响应对象是C# 序列化通过SOAP发送的对象,c#,serialization,soap,dynamics-crm,C#,Serialization,Soap,Dynamics Crm,我正在处理一些对Microsoft CRM的SOAP请求/响应,我正试图保存这些请求/响应。我试图序列化的响应对象是Microsoft.Xrm.Sdk.Metadata.OptionSetMetadataBase()。尝试使用此扩展方法序列化对象时: 公共静态字符串序列化(此IEExtensibleDataObject对象,bool indent=false) { NetDataContractSerializer contractSerializer=新的NetDataContractSeri
Microsoft.Xrm.Sdk.Metadata.OptionSetMetadataBase
()。尝试使用此扩展方法序列化对象时:
公共静态字符串序列化(此IEExtensibleDataObject对象,bool indent=false)
{
NetDataContractSerializer contractSerializer=新的NetDataContractSerializer();
使用(StringWriter StringWriter=new StringWriter((IFormatProvider)CultureInfo.InvariantCulture))
{
使用(XmlTextWriter XmlTextWriter=新的XmlTextWriter((TextWriter)stringWriter))
{
如果(缩进)
{
xmlTextWriter.Formatting=Formatting.Indented;
xmlTextWriter.Indentation=2;
}
contractSerializer.WriteObject((XmlWriter)xmlTextWriter,(object)obj);
返回stringWriter.ToString();
}
}
}
我得到这个错误:
threw an exception of type 'System.Runtime.Serialization.InvalidDataContractException'
Data: {System.Collections.ListDictionaryInternal}
HResult: -2146233088
HelpLink: null
InnerException: null
Message: "Type 'Microsoft.Xrm.Sdk.Metadata.OptionMetadataCollection' cannot be serialized. Consider marking it with the DataContractAttribute attribute, and marking all of its members you want serialized with the DataMemberAttribute attribute. If the type is a collection, consider marking it with the CollectionDataContractAttribute. See the Microsoft .NET Framework documentation for other supported types."
Source: "System.Runtime.Serialization"
StackTrace: "at System.Runtime.Serialization.DataContract.DataContractCriticalHelper.ThrowInvalidDataContractException(String message, Type type)
at System.Runtime.Serialization.DataContract.ThrowTypeNotSerializable(Type type)
at System.Runtime.Serialization.CollectionDataContract.GetValidContract(SerializationMode mode)
at System.Runtime.Serialization.XmlObjectSerializerContext.GetDataContract(Int32 id, RuntimeTypeHandle typeHandle)
at System.Runtime.Serialization.XmlObjectSerializerWriteContextComplex.GetDataContract(Int32 id, RuntimeTypeHandle typeHandle)
at System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerialize(XmlWriterDelegator xmlWriter, Object obj, Boolean isDeclaredType, Boolean writeXsiType, Int32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle)
at System.Runtime.Serialization.XmlObjectSerializerWriteContextComplex.InternalSerialize(XmlWriterDelegator xmlWriter, Object obj, Boolean isDeclaredType, Boolean writeXsiType, Int32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle)
at System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerializeReference(XmlWriterDelegator xmlWriter, Object obj, Boolean isDeclaredType, Boolean writeXsiType, Int32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle)
at WriteOptionSetMetadataToXml(XmlWriterDelegator , Object , XmlObjectSerializerWriteContext , ClassDataContract )
at System.Runtime.Serialization.ClassDataContract.WriteXmlValue(XmlWriterDelegator xmlWriter, Object obj, XmlObjectSerializerWriteContext context)
at System.Runtime.Serialization.NetDataContractSerializer.InternalWriteObjectContent(XmlWriterDelegator writer, Object graph, DataContract contract, Hashtable surrogateDataContracts)
at System.Runtime.Serialization.NetDataContractSerializer.InternalWriteObject(XmlWriterDelegator writer, Object graph)
at System.Runtime.Serialization.XmlObjectSerializer.WriteObjectHandleExceptions(XmlWriterDelegator writer, Object graph, DataContractResolver dataContractResolver)
at System.Runtime.Serialization.NetDataContractSerializer.WriteObject(XmlWriter writer, Object graph)
at DLaB.Common.Extensions.Serialize(IExtensibleDataObject obj, Boolean indent)"
TargetSite: {Void ThrowInvalidDataContractException(System.String, System.Type)}
我假设这是可能的,因为我只是通过一个SOAP请求检索这个信息,因此它只是反序列化的。以下是Soap响应(如果有帮助):
检索分配选项集
选项SetMetadata
0872a2b1-6db1-48a9-8aa2-1686f294b1e0
真的
需要类型
1033
真的
需要类型
1033
真的
需要
1033
真的
需要
1033
假的
假的
不可定制
真的
真的
真的
需要
挑选名单
5.0.0.0
真的
真的
一定有
1033
真的
一定有
1033
0
真的
真的
应该有
1033
真的
应该有
1033
1.
真的
真的
好极了
1033
public static string Serialize(this IExtensibleDataObject obj, bool indent = false)
{
DataContractSerializer contractSerializer = new DataContractSerializer(obj.GetType());
using (StringWriter stringWriter = new StringWriter(CultureInfo.InvariantCulture))
{
using (XmlTextWriter xmlTextWriter = new XmlTextWriter(stringWriter))
{
if (indent)
{
xmlTextWriter.Formatting = Formatting.Indented;
xmlTextWriter.Indentation = 2;
}
contractSerializer.WriteObject(xmlTextWriter, obj);
return stringWriter.ToString();
}
}
}