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(); }
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(); }