C# 序列化通过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 CRM的SOAP请求/响应,我正试图保存这些请求/响应。我试图序列化的响应对象是
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();
            }
        }
    }