public override void Read(object input, ObjectReader reader, Writer writer, PartialOptions optionsOverride) { if (ReferenceStructure(input, reader, optionsOverride)) return; if (ShouldWriteTypeIdentifier(reader.Options, optionsOverride)) writer.BeginStructure(CurrentTypeResolver.GetTypeIdentifier(Type), reader.GetType()); else writer.BeginStructure(Type); for (int i = 0; i < AllSerializableProperties.Length; i++) { PropertyDefinition property = AllSerializableProperties[i]; if (property.MatchesPropertyFilter(reader.Options)) { writer.AddProperty(property.SerializedName); reader.PropertyStack.Push(property); object value = property.GetFrom(input); property.Read(value, reader, writer); reader.PropertyStack.Pop(); } } writer.EndStructure(); }
public override void Read(object input, ObjectReader reader, Writer writer, PartialOptions optionsOverride) { IDictionary dictionary = input as IDictionary; if (dictionary == null) return; if (ReferenceStructure(input, reader, optionsOverride)) return; if (ShouldWriteTypeIdentifier(reader.Options, optionsOverride)) writer.BeginStructure(CurrentTypeResolver.GetTypeIdentifier(Type), reader.GetType()); else writer.BeginStructure(Type); foreach (object key in dictionary.Keys) { // Convert.ToString is in case the keys are numbers, which are represented // as strings when used as keys, but can be indexed with numbers in JavaScript string name = Convert.ToString(key, CultureInfo.InvariantCulture); object value = dictionary[key]; writer.AddProperty(name); ValueTypeDef.ReadObject(value, reader, writer, PartialOptions.Default); } writer.EndStructure(); }
internal ObjectMap(string objectName, string[] memberNames, BinaryTypeEnum[] binaryTypeEnumA, object[] typeInformationA, int[] memberAssemIds, ObjectReader objectReader, int objectId, BinaryAssemblyInfo assemblyInfo, SizedArray assemIdToAssemblyTable) { _objectName = objectName; _memberNames = memberNames; _binaryTypeEnumA = binaryTypeEnumA; _typeInformationA = typeInformationA; _objectReader = objectReader; _objectId = objectId; _assemblyInfo = assemblyInfo; if (assemblyInfo == null) { throw new SerializationException(SR.Format(SR.Serialization_Assembly, objectName)); } _objectType = objectReader.GetType(assemblyInfo, objectName); _memberTypes = new Type[memberNames.Length]; for (int i = 0; i < memberNames.Length; i++) { InternalPrimitiveTypeE primitiveTypeEnum; string typeString; Type type; bool isVariant; BinaryTypeConverter.TypeFromInfo( binaryTypeEnumA[i], typeInformationA[i], objectReader, (BinaryAssemblyInfo)assemIdToAssemblyTable[memberAssemIds[i]], out primitiveTypeEnum, out typeString, out type, out isVariant); _memberTypes[i] = type; } _objectInfo = objectReader.CreateReadObjectInfo(_objectType, memberNames, null); if (!_objectInfo._isSi) { _objectInfo.GetMemberTypes(memberNames, _objectInfo._objectType); // Check version match } }