在 c# 中将类的 Inner 属性序列化为 Json 对象



我有以下一组类。

    public class ClassOne
    {
        [JsonProperty(PropertyName = "property1", NullValueHandling = NullValueHandling.Ignore)]
        public string Prop1 { get; set; }
        [JsonProperty(PropertyName = "property2", NullValueHandling = NullValueHandling.Ignore)]
        public string Prop2 { get; set; }
        public ClassTwo ClassTwo { get; set; }
    }
    public class ClassTwo
    {
        [JsonProperty(PropertyName = "property3", NullValueHandling = NullValueHandling.Ignore)]
        public string Prop3 { get; set; }
        [JsonProperty(PropertyName = "property4", NullValueHandling = NullValueHandling.Ignore)]
        public string Prop4 { get; set; }
    }

我需要你们的帮助才能将ClassOne对象序列化为json对象。所需输出为:I用于序列化Newtonsoft.Json

{
    "property1":"test",
    "property2":"test",
    "property3":"test",
    "property4":"test",
}

谢谢大家!我已经使用自定义转换器对我的问题进行了排序,如下所示。

    public class FlattenJsonConverter : JsonConverter
    {
        #region Public Methods
        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            var jToken = JToken.FromObject(value);
            if (jToken.Type != JTokenType.Object)
            {
                jToken.WriteTo(writer);
                return;
            }
            var jObject = (JObject)jToken;
            writer.WriteStartObject();
            WriteJson(writer, jObject);
            writer.WriteEndObject();
        }
        private void WriteJson(JsonWriter writer, JObject value)
        {
            foreach (var property in value.Properties())
            {
                var jObject = property.Value as JObject;
                if (jObject != null)
                    WriteJson(writer, jObject);
                else
                    property.WriteTo(writer);
            }
        }
        public override object ReadJson(JsonReader reader, Type objectType,
           object existingValue, JsonSerializer serializer)
        {
            return null;
        }
        public override bool CanConvert(Type objectType)
        {
            return true;
        }
        #endregion
    }

用法:

    // To Flatten the Json result
    var settings = new JsonSerializerSettings
    {
        Formatting = Formatting.Indented,
        Converters = new List<JsonConverter> { new FlattenJsonConverter() },
    };
    var serializedJsonObject = JObject.Parse(testclassObject, settings));

最新更新