在将JSON日期反序列化为C#DateTime时,我们遇到了这样一个令人讨厌的问题.
代码是:
JavaScriptSerializer serializer = new JavaScriptSerializer();
jsonTrechos = jsonTrechos.Replace("/Date(", "\\/Date(").Replace(")/", ")\\/");
Trecho[] model = serializer.Deserialize<Trecho[]>(jsonTrechos);
Run Code Online (Sandbox Code Playgroud)
这jsonTrechos是一串json2.js JSON.stringify();.
问题是:反序列化工作,在Trechos对象的所有日期加上2小时.
我的时区是巴西(UTC -3),如果它有任何关系,我们正在夏令时(所以我们目前在UTC -2).我想也许本地化和时区可能会在这方面发挥作用,如果真的如此,我不知道如何解决它.
我正在使用.NET JavascriptSerializer将JSON反序列化为运行时对象,并且在大多数情况下,JSON字段和对象字段之间的映射是自动的.但是,我面临以下情况,并欢迎有关如何处理它的建议.
想象一下,我们有一个Shape的JSON表示,可以是Square或Circle.例如,
{"ShapeType":"Circle","Shape":{"Color":"Blue", "Radius":"5.3"}}
Run Code Online (Sandbox Code Playgroud)
要么
{"ShapeType":"Square","Shape":{"Color":"Red", "Side":"2.1"}}
Run Code Online (Sandbox Code Playgroud)
这些JSON字符串是在下面显示的类层次结构之后建模的.
class ShapePacket
{
public string ShapeType; // either "Square" or "Circle"
public Shape Shape;
}
class Shape // all Shapes have a Color
{
public string Color;
}
class Square : Shape
{
public float Side;
}
class Circle : Shape
{
public float Radius;
}
Run Code Online (Sandbox Code Playgroud)
JavascriptSerializer.Deserialize在这种情况下,简单地调用不起作用,其中涉及变体类型.有没有办法哄骗JavascriptSerializer反序列化尽管我的数据类型中的"分支"?我也对第三方解决方案持开放态度.
Json.Encode()Helper 是否使用JavaScriptSerializer该类将字符串编码为json?
我正在使用循环引用异常,Json.Encode(Model)即使我正在序列化的类属性具有该[ScriptIgnore]属性.
我唯一的猜测是,Json.Encode()帮助器可能不会使用JavaScriptSerializer序列化为json,但我无法在msdn上找到任何文档.
@Html.Raw(Json.Encode(Model))
Run Code Online (Sandbox Code Playgroud)
以下是其中一个具有不应序列化的属性的模型的示例...
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Web.Script.Serialization;
namespace RobotDog.Entities {
public class Character {
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[MaxLength(200)]
public string Name { get; set; }
public virtual Person Person { get; set; }
[ScriptIgnore]
public virtual Movie Movie { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用C#在ASP.NET v4.0中使用JavascriptSerializer对象.我没有使用Visual Studio - 这是在一个实时的IIS7服务器上.我可以在同一个Web服务器上使用VB访问这个对象,所以我知道必需的DLL存在并正确配置.
但是当我尝试在C#中使用此对象时,我收到此错误: The type or namespace name 'JavascriptSerializer' could not be found
在我的类文件中,我有这个:
using System.Web;
using System.Web.Script;
using System.Web.Script.Serialization;
Run Code Online (Sandbox Code Playgroud)
在web.config中,我有这个:
<assemblies>
<add assembly="System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</assemblies>
Run Code Online (Sandbox Code Playgroud)
在我的default.aspx.cs文件中,我有这个:
JavaScriptSerializer obj_serializer = new JavascriptSerializer();
Run Code Online (Sandbox Code Playgroud)
这是造成上述错误的最后一行代码.
救命?
我有一个MVC3运行的应用程序.NET 4.0,当我使用时,JavascriptSerializer.Deserialize我收到一个错误.
使用JSON JavaScriptSerializer进行序列化或反序列化时出错.字符串的长度超过maxJsonLength属性上设置的值.
阅读我可以在web.config中为maxJsonLength设置无限长度我把jsonSerialization maxJsonLength密钥放在我的web.config中但它被忽略了.虽然我可以JavaScriptSerializer.MaxJsonLength在代码中设置属性,但它工作正常.
我想在Web.config代码而不是代码中获得价值.这是我如何使用JavaScriptSerializer.
Dim client As New WebClient
...
Dim result = _client.DownloadString("Test")
Dim serializer = New JavaScriptSerializer
Return serializer.Deserialize(Of Foo)(result)
Run Code Online (Sandbox Code Playgroud)
这是我的 Web.config
<configuration>
<configSections>
...
</configSections>
<appSettings>
...
</appSettings>
<system.web>
<customErrors mode="On">
<error statusCode="404" redirect="/Http404"/>
<error statusCode="403" redirect="/Http403"/>
<error statusCode="550" redirect="/Http550"/>
</customErrors>
<compilation debug="true" targetFramework="4.0"/>
<pages controlRenderingCompatibilityVersion="4.0">
<namespaces>
<add namespace="System.Web.Helpers"/>
<add namespace="System.Web.Mvc"/>
<add namespace="System.Web.Mvc.Ajax"/>
<add namespace="System.Web.Mvc.Html"/>
<add namespace="System.Web.Routing"/>
<add …Run Code Online (Sandbox Code Playgroud) 我有一个JSON对象,其中一个元素的值是一个字符串.在这个字符串中有字符"<RPC>".我拿这个整个JSON对象,在我的ASP.NET服务器代码中,我执行以下操作来获取命名对象rpc_response并将其添加到POST响应中的数据:
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
HttpContext.Current.Response.AddHeader("Pragma", "no-cache");
HttpContext.Current.Response.AddHeader("Cache-Control", "private, no-cache");
HttpContext.Current.Response.AddHeader("Content-Disposition", "inline; filename=\"files.json\"");
HttpContext.Current.Response.Write(serializer.Serialize(rpc_response));
HttpContext.Current.Response.ContentType = "application/json";
HttpContext.Current.Response.StatusCode = 200;
Run Code Online (Sandbox Code Playgroud)
在序列化对象之后,我在另一端(不是Web浏览器)接收它,并且该特定字符串如下所示:\u003cRPC\u003e.
我该怎么做才能防止这些(和其他)字符被正确编码,仍然可以序列化我的JSON对象?
我正在使用ASP.NET MVC 3的库(Telerik).
我的所有功能都有问题,需要通过AJAX返回一些数据:
我正在使用EF4来连接我的数据库,而且我(并且需要)两种方式的导航属性(想象一下,有一些帖子和一个帖子的用户都有用户).
问题是该库正在使用JavaScriptSerializer,它使用JSON对数据进行编码.
我得到的错误
序列化"System.Data.Entity.DynamicProxies.Employee_34048F4F6A98297F826C798A27640C7383E95E8EA8282EC8A5F738FA0C77CBC3"类型的对象时检测到循环引用."
异常,这是正确的,因为父级引用了它的子级,而子级引用了它的父级.
我已经找到了一些解决方法,但没有什么能完全满足我:
我和WCF几乎有同样的问题,我创建了一个知道处理循环引用的序列化,我们可以在这里做同样的事吗?或者有办法管理这个吗?
如果没有,我想最好的方法是使用"ViewModel",但有没有办法加速这些创作?像一个泛型对象,它接受构造函数EF对象并删除循环引用?还要别的吗?
非常感谢你
.net serialization entity-framework circular-reference javascriptserializer
我使用以下内容将JSON字符串反序列化到我自己的类中:
JavaScriptSerializer serializer = new JavaScriptSerializer();
Dictionary<string, object> x = (Dictionary<string, object>)serializer.DeserializeObject(json);
MyJsonStruct data = serializer.Deserialize<MyJsonStruct>(x["d"].ToString());
Run Code Online (Sandbox Code Playgroud)
但是一旦JavaScriptSerializer.Deserialize()调用该方法,就会抛出异常:
A first chance exception of type 'System.Collections.Generic.KeyNotFoundException' occurred in mscorlib.dll
System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary.
at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
Run Code Online (Sandbox Code Playgroud)
有没有办法找出触发异常的键?
用于解决此类异常的一般技术(或配方)将是最受欢迎的.
更新:如果我删除[d],我收到以下内容:
A first chance exception of type 'System.ArgumentException' occurred in System.Web.Extensions.dll
System.ArgumentException: Invalid JSON primitive: System.Collections.Generic.Dictionary.
at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject()
at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)
at System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)
at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, …Run Code Online (Sandbox Code Playgroud) 我正在和ajax一起使用一个实体.我希望在使用JavaScript创建的网格中使用实体框架提供完整的表格.我目前发送的表格少于140行.我的代码工作,如果我在表中只有50行,我得到以下错误:
{"Message":"Error during serialization or deserialization using the JSON JavaScriptSerializer. The length of the string exceeds the value set on the maxJsonLength property.","StackTrace":" at System.Web.Script.Serialization.JavaScriptSerializer.Serialize(Object obj, StringBuilder output, SerializationFormat serializationFormat)\r\n at System.Web.Script.Serialization.JavaScriptSerializer.Serialize(Object obj, SerializationFormat serializationFormat)\r\n at System.Web.Script.Serialization.JavaScriptSerializer.Serialize(Object obj)\r\n at System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext context, WebServiceMethodData methodData, IDictionary`2 rawParams)\r\n at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.InvalidOperationException"}
Run Code Online (Sandbox Code Playgroud)
在我的网络统计数据中,我的响应正文中的XMLHttpRequest出现500错误,我有错误,如上所示.如果我将行数限制为50,我可以让页面正常工作,我可以在响应正文中看到我的数据.以下代码是将实体数据发送到javascript所需的所有代码.JavaScript的:
$(function() {
$.ajax({
url: "EditFeedApac.aspx/GetApacData",
type: "POST",
contentType: "application/json",
success: function (result) {
console.log(result.d);
},
error: showError
});
});
Run Code Online (Sandbox Code Playgroud)
C#
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static IEnumerable<PreApacData> GetApacData()
{ …Run Code Online (Sandbox Code Playgroud) 我正在将我的项目移植到DNX-Core 5.0并试图找到工作,但我找不到JavaScriptSerializer和AppSettingReader类.我知道它System.Web被移除了所以请任何人帮我找到使用它们的替代方案.
是否有任何Nuget可供选择?
appsettings javascriptserializer asp.net-core-mvc .net-core asp.net-core
c# ×6
json ×4
.net ×3
asp.net ×2
.net-core ×1
appsettings ×1
asp.net-core ×1
encoding ×1
javascript ×1
jquery ×1
pagemethods ×1
razor ×1
vb.net ×1
webclient ×1