protected override void SerializeJson(JsonWriter writer, object value, IFieldNameQuery castValue, JsonSerializer serializer)
        {
            var fieldName = castValue.Field;

            if (fieldName == null)
            {
                return;
            }

            var settings = serializer.GetConnectionSettings();

            var field = settings?.Inferrer.Field(fieldName);

            if (field.IsNullOrEmpty())
            {
                return;
            }

            writer.WriteStartObject();
            writer.WritePropertyName(field);

            this.Reserialize(writer, value, serializer);

            writer.WriteEndObject();
        }
예제 #2
0
        protected override void SerializeJson(JsonWriter writer, object value, IFieldNameQuery castValue, JsonSerializer serializer)
        {
            var fieldName = castValue.Field;

            if (fieldName == null)
            {
                return;
            }

            var settings = serializer.GetConnectionSettings();
            var field    = settings.Inferrer.Field(fieldName);

            if (field.IsNullOrEmpty())
            {
                return;
            }

            var info = GetOrCreateTypeInfo(typeof(TInterface));

            using (var sw = new StringWriter())
                using (var localWriter = new JsonTextWriter(sw))
                {
                    this.Reserialize(localWriter, value, serializer);
                    var    jo = JObject.Parse(sw.ToString());
                    var    v  = info.Item1.ValueProvider.GetValue(castValue);
                    JToken o  = null;
                    if (v != null)
                    {
                        o = JToken.FromObject(v, serializer);
                    }

                    if (info.Item2.FieldName.IsNullOrEmpty())
                    {
                        jo.Add(field, o);
                    }
                    else
                    {
                        var subObject = new JObject
                        {
                            { info.Item2.FieldName, o }
                        };
                        jo.Add(field, subObject);
                    }
                    writer.WriteToken(jo.CreateReader());
                }
        }