一尘不染

将JSON对象属性反序列化为字符串

json

我有一些具有各种属性的JSON,其中大多数是简单数据类型。但是,我在JSON中有一个属性,当我将其反序列化为C#类时,我只需要将其反序列化为字符串即可。

JSON示例:

{"simpleProperty": "value1", "json":{"a":"a1", "b":"b1"}}

除了将是有效的JSON对象外,“ json”对象没有任何设置结构。

因此,在上面的示例中,“ json”的值是一个JSON对象-但是当它反序列化时,我需要将它作为字符串。

因此,如果我的C#类是:

public class MyClass
{
    public string SimpleProperty { get; set; }
    public string Json { get; set; }
}

然后,如果我使用:

var myClass = JsonConvert.DeserializeObject<MyClass>(jsonStr);

我希望myClass.Json只是一个简单的字符串。

我已经考虑过为此创建一个自定义JsonConverter,但是对于这种简单的东西来说似乎太复杂了。我一定在这里想念什么。任何方向将不胜感激。


阅读 435

收藏
2020-07-27

共1个答案

一尘不染

出于我的需要,我决定继续执行以下自定义JsonConverter:

    class JsonConverterObjectToString : JsonConverter
    {
        public override bool CanConvert(Type objectType)
        {
            return (objectType == typeof(JTokenType));
        }

        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            JToken token = JToken.Load(reader);
            if (token.Type == JTokenType.Object)
            {
                return token.ToString();
            }
            return null;
        }

        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            //serializer.Serialize(writer, value);

            //serialize as actual JSON and not string data
            var token = JToken.Parse(value.ToString());
            writer.WriteToken(token.CreateReader());

        }
    }

我尚未对上述实现进行彻底的测试,并且我对Canconvert方法并不完全确定,因为它似乎从未被调用过,但是它似乎进行了转换,然后允许我将反序列化的类存储到MongoDB中,并且JSON数据是被存储一个字符串。所以目前一切都很好。
更新:修改了WriteJson方法以将其序列化回JSON对象(而不是字符串)。

2020-07-27