如何序列化原始json字段?

yga*_*don 10 c# linq asp.net-mvc json.net javascriptserializer

我在db中有一个存储json字符串的字段,当我在json结果中返回它时,我想要它将作为json原始数据返回,而不是用引号作为字符串扭曲.

UPDATE 1(更多信息): 如果你看图像字段它包含一个原始的json字符串值
但是在用JsonResult序列化之后它会被引号扭曲,因为它是一种String,我怎么能告诉序列化器将图像字段视为原始json数据?

        var db = new ModelsContainer();
        var res = db.Images.OrderByDescending(i=>i.DateCreated).Skip(skip).Take(take).Select( i => new {
            id = i.Id,
            dateCreated = i.DateCreated,
            images =  i.Images ,
            user = new {
                id = i.User.Id,
                facebookId = i.User.FacebookId,
                displayName = i.User.DisplayName
            },
            tags = i.Tags.Select( t => t.Value )
        }).ToList();

        return Json(res, JsonRequestBehavior.AllowGet);

     [
        {
            "id":"5c528e88-f3a7-4b30-9746-980867325fd1",
            "dateCreated":"\/Date(1364381593000)\/",
            "images":"[{\"source\":\"http://localhost:9242/images/f4956702/6d34/42db/b28a/397d0eaf3097.jpg\",\"width\":237,\"height\":237},{\"source\":\"http://localhost:9242/images/87d47041/1522/4d10/9325/105851aae259.jpg\",\"width\":633,\"height\":633},{\"source\":\"http://localhost:9242/images/2a639272/9067/42fb/83ee/e88f0a0878f8.jpg\",\"width\":547,\"height\":547},{\"source\":\"http://localhost:9242/images/37caa7b2/e183/4efc/96eb/487e556501b2.jpg\",\"width\":1024,\"height\":1024}]",
            "user":{"id":"ea39616d-6ff9-424b-b99b-7bee53e674bb","facebookId":"608215901","displayName":"Yonathan Garti"},
            "tags":["test","test","test"]
        },
        ...
    ]
Run Code Online (Sandbox Code Playgroud)

Tor*_*son 13

使用Json.net,您可以定义自己的JsonConverters以应用特定的序列化行为.您可以将其应用于特定类型,或者,如果您有视图模型,则可以应用特定属性.

在您的情况下,您希望使用将Images-string写为原始字符串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; }
    /* ...  */
}
Run Code Online (Sandbox Code Playgroud)

  • 另一种解决方案是,如果你有一个自定义类型,JsonConverter处理,但在你的情况下,我相信它是一个普通的字符串,所以这将无法正常工作.我的建议是创建一个自定义View模型.在上面的代码中,您只需要使用该自定义视图模型而不是初始化的匿名对象(res). (2认同)