How to serialize a raw json field?

前端 未结 2 1538
不知归路
不知归路 2021-01-11 16:28

I have a field in the db that store a json string and I want that when I return it in a json result that will be returned as json raw data and not warped with quotes as str

相关标签:
2条回答
  • 2021-01-11 16:34

    With Json.net you can define your own JsonConverters to apply a specific serialization behavior. You may apply it for a specific type or, if you have a view model, a specific property.

    In your case you want to write the Images-string as a raw-string using JsonWriter.WriteRawValue.

    Ie.

    public class PlainJsonStringConverter : Newtonsoft.Json.JsonConverter
    {
        public override bool CanConvert(Type objectType)
        {
            return objectType == typeof(string);
        }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            return reader.Value;
        }
        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            writer.WriteRawValue((string)value);
        }
    }
    
    public class MyViewModel
    {
        public string id { get; set; }
        [Newtonsoft.Json.JsonConverter(typeof(PlainJsonStringConverter))]
        public string images { get; set; }
        /* ...  */
    }
    
    0 讨论(0)
  • 2021-01-11 16:37

    You will need to unserialize the data. C# offers a class to handle JSON data.

    http://msdn.microsoft.com/en-us/library/system.runtime.serialization.json.datacontractjsonserializer.aspx

    Excerpt from http://msdn.microsoft.com/en-us/library/bb412179.aspx :

    Normally, JSON serialization and deserialization is handled automatically by Windows Communication Foundation (WCF) when you use data contract types in service operations that are exposed over AJAX-enabled endpoints. However, in some cases you may need to work with JSON data directly - this is the scenario that this topic demonstrates.

    //Deserialize the JSON-encoded data into a new instance of Person by using the ReadObject method of the DataContractJsonSerializer.
    
    stream1.Position = 0;   
    Person p2 = (Person)ser.ReadObject(stream1);
    
    //Show the results.
    
    Console.Write("Deserialized back, got name=");
    Console.Write(p2.name);
    Console.Write(", age=");
    Console.WriteLine(p2.age);
    
    0 讨论(0)
提交回复
热议问题