public void DoesNotExportPropertyValueWhenEqualsSpecfiedDefault()
        {
            IObjectMemberExporter exporter = CreatePropertyExporter("prop", 0, 0);

            ExportContext context = new ExportContext();
            JsonRecorder  writer  = new JsonRecorder();

            writer.WriteStartObject();
            exporter.Export(context, writer, new object());
            writer.WriteEndObject();

            JsonReader reader = writer.CreatePlayer();

            reader.ReadToken(JsonTokenClass.Object);
            reader.ReadToken(JsonTokenClass.EndObject);
        }
        public void ExportsPropertyValueWhenNotEqualsSpecfiedDefault()
        {
            const string          propertyName = "prop";
            IObjectMemberExporter exporter     = CreatePropertyExporter(propertyName, 42, 0);

            ExportContext context = new ExportContext();
            JsonRecorder  writer  = new JsonRecorder();

            writer.WriteStartObject();
            exporter.Export(context, writer, new object());
            writer.WriteEndObject();

            JsonReader reader = writer.CreatePlayer();

            reader.ReadToken(JsonTokenClass.Object);
            Assert.AreEqual(propertyName, reader.ReadMember());
            Assert.AreEqual(42, reader.ReadNumber().ToInt32());
        }
Exemplo n.º 3
0
        protected override void ExportValue(ExportContext context, object value, JsonWriter writer)
        {
            Debug.Assert(context != null);
            Debug.Assert(value != null);
            Debug.Assert(writer != null);

            if (_properties.Count == 0)
            {
                writer.WriteString(value.ToString());
            }
            else
            {
                ObjectReferenceTracker tracker = null;

                try
                {
                    writer.WriteStartObject();

                    int index = 0;

                    foreach (PropertyDescriptor property in _properties)
                    {
                        IObjectMemberExporter exporter = _exporters != null && index < _exporters.Length ?
                                                         _exporters[index++] : null;

                        if (exporter != null)
                        {
                            exporter.Export(context, writer, value);
                        }
                        else
                        {
                            object propertyValue = property.GetValue(value);

                            if (!JsonNull.LogicallyEquals(propertyValue))
                            {
                                writer.WriteMember(property.Name);

                                if (value.GetType().IsClass&& tracker == null)
                                {
                                    //
                                    // We are about to enter a deeper scope so
                                    // start tracking the current object being
                                    // exported. This will help to detect
                                    // recursive references that may occur
                                    // through this exporter deeper in the tree.
                                    //

                                    tracker = TrackObject(context, value);
                                }

                                context.Export(propertyValue, writer);
                            }
                        }
                    }

                    writer.WriteEndObject();
                }
                finally
                {
                    if (tracker != null)
                    {
                        tracker.Pop(value);
                    }
                }
            }
        }