System.Runtime.Serialization.Json.DataContractJsonSerializer.InvokeOnSerialized C# (CSharp) Method

InvokeOnSerialized() static private method

static private InvokeOnSerialized ( Object value, DataContract contract, System.Runtime.Serialization.Json.XmlObjectSerializerWriteContextComplexJson context ) : void
value Object
contract DataContract
context System.Runtime.Serialization.Json.XmlObjectSerializerWriteContextComplexJson
return void
        static internal void InvokeOnSerialized(Object value, DataContract contract, XmlObjectSerializerWriteContextComplexJson context)
        {
            if (contract is ClassDataContract)
            {
                ClassDataContract classContract = contract as ClassDataContract;

                if (classContract.BaseContract != null)
                    InvokeOnSerialized(value, classContract.BaseContract, context);
                if (classContract.OnSerialized != null)
                {
                    bool memberAccessFlag = classContract.RequiresMemberAccessForWrite(null);
                    try
                    {
                        classContract.OnSerialized.Invoke(value, new object[] { context.GetStreamingContext() });
                    }
                    catch (SecurityException securityException)
                    {
                        if (memberAccessFlag)
                        {
                            classContract.RequiresMemberAccessForWrite(securityException);
                        }
                        else
                        {
                            throw;
                        }
                    }
                    catch (TargetInvocationException targetInvocationException)
                    {
                        if (targetInvocationException.InnerException == null)
                            throw;
                        //We are catching the TIE here and throws the inner exception only,
                        //this is needed to have a consistent exception story in all serializers
                        throw targetInvocationException.InnerException;
                    }
                }
            }
        }

Usage Example

コード例 #1
0
        public static Dictionary <string, object> ConvertClassDataContractToDictionary(DataContractJsonSerializer serializer, ClassDataContract dataContract, object value, XmlObjectSerializerWriteContextComplexJson context, bool writeServerType)
        {
            Dictionary <string, object> classToDictionary = new Dictionary <string, object>();

            if (writeServerType)
            {
                AddTypeInformation(classToDictionary, DataContract.GetDataContract(value.GetType()));
            }

            if (dataContract.UnderlyingType == Globals.TypeOfDateTimeOffsetAdapter)
            {
                DateTimeOffset dto = (DateTimeOffset)value;
                classToDictionary["DateTime"]      = dto.UtcDateTime;
                classToDictionary["OffsetMinutes"] = (short)dto.Offset.TotalMinutes;
                return(classToDictionary);
            }
            else if (dataContract.IsKeyValuePairAdapter)
            {
                //Convert KeyValuePair<K,T> to KeyValuePairAdapter<K,T>
                value = dataContract.KeyValuePairAdapterConstructorInfo.Invoke(new object[] { value });
            }

            DataContractJsonSerializer.InvokeOnSerializing(value, dataContract, context);
            WriteClassDataContractMembers(serializer, dataContract, ref classToDictionary, value, context);
            DataContractJsonSerializer.InvokeOnSerialized(value, dataContract, context);

            return(classToDictionary);
        }