标签: javascriptserializer

问题在C#中反序列化JSON日期 - 增加2小时

在将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).我想也许本地化和时区可能会在这方面发挥作用,如果真的如此,我不知道如何解决它.

c# json javascriptserializer

5
推荐指数
2
解决办法
1万
查看次数

如何处理JSON和变体对象?

我正在使用.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反序列化尽管我的数据类型中的"分支"?我也对第三方解决方案持开放态度.

.net c# json javascriptserializer

5
推荐指数
1
解决办法
1280
查看次数

Json.Encode()是否使用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# json javascriptserializer razor

5
推荐指数
1
解决办法
4348
查看次数

ASP.NET C#:无法找到JavascriptSerializer

我正在尝试使用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)

这是造成上述错误的最后一行代码.

救命?

c# asp.net javascriptserializer

5
推荐指数
2
解决办法
2万
查看次数

Web.config jsonSerialization maxJsonLength被忽略

我有一个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)

vb.net webclient javascriptserializer asp.net-mvc-3

5
推荐指数
1
解决办法
1万
查看次数

JSON数据中的"<"字符序列化为\ u003c

我有一个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 encoding serialization json javascriptserializer

5
推荐指数
1
解决办法
6254
查看次数

如何序列化EF POCO自动生成的对象以避免循环引用?

我正在使用ASP.NET MVC 3的库(Telerik).

我的所有功能都有问题,需要通过AJAX返回一些数据:

我正在使用EF4来连接我的数据库,而且我(并且需要)两种方式的导航属性(想象一下,有一些帖子和一个帖子的用户都有用户).

问题是该库正在使用JavaScriptSerializer,它使用JSON对数据进行编码.

我得到的错误

序列化"System.Data.Entity.DynamicProxies.Employee_34048F4F6A98297F826C798A27640C7383E95E8EA8282EC8A5F738FA0C77CBC3"类型的对象时检测到循环引用."

异常,这是正确的,因为父级引用了它的子级,而子级引用了它的父级.

我已经找到了一些解决方法,但没有什么能完全满足我:

  • 使用数据服务器绑定:不能,函数必须在ajax中工作(它是网格的寻呼机,当页面滚动到最后时加载下一个元素)
  • 使用匿名对象:不灵活,因为如果我在数据库中另外添加一个字段,我必须将它添加到我的所有匿名对象中,此外,如果我需要一个我想要的子集合,那就很无聊还为该子列表的所有元素创建对象.
  • 使用ViewModel:几乎相同的问题,如果我还有一个字段,我必须在所有viewModel上添加这些字段,并且我要为我的所有60个视图创建一个视图模型,其字段与我的模型完全相同,...
  • 使用NonSerializedAttribute:我不知道如何放入生成我的POCO对象的T4模板,我不确定它是否有效:有时主要对象是子对象,有时它是父对象,空关系必须是另一个.

我和WCF几乎有同样的问题,我创建了一个知道处理循环引用的序列化,我们可以在这里做同样的事吗?或者有办法管理这个吗?

如果没有,我想最好的方法是使用"ViewModel",但有没有办法加速这些创作?像一个泛型对象,它接受构造函数EF对象并删除循环引用?还要别的吗?

非常感谢你

.net serialization entity-framework circular-reference javascriptserializer

4
推荐指数
1
解决办法
1490
查看次数

如何解决KeyNotFoundException问题

我使用以下内容将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)

.net c# javascriptserializer

4
推荐指数
1
解决办法
1万
查看次数

字符串超过maxJsonLength且小于250kb

我正在和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)

javascript c# jquery pagemethods javascriptserializer

3
推荐指数
1
解决办法
2523
查看次数

如何在ASP.NET 5中使用JavaScriptSerializer?

我正在将我的项目移植到DNX-Core 5.0并试图找到工作,但我找不到JavaScriptSerializer和AppSettingReader类.我知道它System.Web被移除了所以请任何人帮我找到使用它们的替代方案.

是否有任何Nuget可供选择?

appsettings javascriptserializer asp.net-core-mvc .net-core asp.net-core

3
推荐指数
1
解决办法
1971
查看次数