如何序列化原始json字段?
我在db中有一个存储json字符串的字段,当我在json结果中返回它时,我想要它将作为json原始数据返回,而不是用引号作为字符串扭曲。
更新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"] }, ... ]
使用Json.net,您可以定义自己的JsonConverters以应用特定的序列化行为。 您可以将其应用于特定类型,或者,如果您有视图模型,则可以应用特定属性。
在您的情况下,您希望使用JsonWriter.WriteRawValue
将Images-string写为原始字符串。
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; } /* ... */ }
您需要反序列化数据。 C#提供了一个处理JSON数据的类。
摘自http://msdn.microsoft.com/en-us/library/bb412179.aspx :
通常,当您在通过启用AJAX的端点上公开的服务操作中使用数据协定类型时,Windows Communication Foundation(WCF)会自动处理JSON序列化和反序列化。 但是,在某些情况下,您可能需要直接使用JSON数据 – 这是本主题演示的方案。
//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);
- 在数据库中存储大型文件会导致类型为“System.OutOfMemoryException”的exception
- MVC .NET在强类型视图中从模型集合创建下拉列表
- 在MVC视图中迭代匿名类型数据
- ASP MVC编译时包括局部视图
- Google跟踪代码管理器服务器端跟踪.NET
- 在编辑器模板中迭代集合时,NameFor会生成错误的名称
- 如何使用linq查询ASP.NET MVC 5entity framework填充视图模型
- 会话结束时间会话呼叫处理方法吗?
- 如何删除dbo.AspNetUserClaims和dbo.AspNetUserLogins表(IdentityUserClaim和IdentityUserLogin实体)?