标签: deserialization

Newtonsoft JSON - 动态对象

我正在使用Newtonsoft JSON库对传入的原始JSON执行动态反序列化,并且发现了一些我无法解释的内容.

起点是以下JSON字符串:

{
  "task": {
    "dueDate": "2012-12-03T00:00:00"
  }
}
Run Code Online (Sandbox Code Playgroud)

那里没什么太复杂的......

在代码我然后这样做:

var dyn = JsonConvert.DeserializeObject<dynamic>(rawJson);
DateTime dueDate = dyn.task.dueDate.Value;
Run Code Online (Sandbox Code Playgroud)

这段代码已经存在好几个月并且工作正常,但是在最近的测试版本中我们看到了以下错误:

'Newtonsoft.Json.Linq.JObject'不包含'task'的定义

堆栈跟踪:在System.Dynamic.UpdateDelegates.UpdateAndExecute1 [T0,TRet]的CallSite.Target(Closure,CallSite,Object)处(CallSite站点,T0 arg0)

现在这是奇怪的,如果我改变上面的代码,一切都开始工作了:

DateTime dueDate = dyn.task.dueDate.Value;
Run Code Online (Sandbox Code Playgroud)

DateTime dueDate = dyn["task"]["dueDate"].Value;
Run Code Online (Sandbox Code Playgroud)

所以,虽然这是"固定的",但我不明白为什么这会解决它以及可能的原因.有没有人有任何想法

c# json dynamic json.net deserialization

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

杰克逊杰森并没有这样的方法错误

我正在尝试使用jackson序列化和反序列化POJO.从POJO到JSON的工作非常完美,但是朝另一个方向发展却并非如此.

我有一个POJO

public class Event {
  private String kind;

  public String getKind() {
    return kind;
  }

  public void setKind(String kind) {
    this.kind = kind;
  }
}
Run Code Online (Sandbox Code Playgroud)

并运行和测试我运行包calendar.model;

Event event = new Event();
event.setKind("This is a kind");
String json = objectMapper.writeValueAsString(event); 
// RETURNS: "{\"kind\":\"This is a kind\"}"

objectMapper.readValue(json, Event.class);
Run Code Online (Sandbox Code Playgroud)

抛出异常

java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonParser.getValueAsString()Ljava/lang/String;
at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:24)
at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:11)
at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:375)
at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:98)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:308)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:121)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2796)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:1942)
at calendar.controller.RootController.details(RootController.java:59)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219) …
Run Code Online (Sandbox Code Playgroud)

java json jackson deserialization

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

使用内存流进行序列化/反序列化

我在使用内存流进行序列化时遇到问题.这是我的代码:

/// <summary>
/// serializes the given object into memory stream
/// </summary>
/// <param name="objectType">the object to be serialized</param>
/// <returns>The serialized object as memory stream</returns>
public static MemoryStream SerializeToStream(object objectType)
{
    MemoryStream stream = new MemoryStream();
    IFormatter formatter = new BinaryFormatter();
    formatter.Serialize(stream, objectType);
    return stream;
}

/// <summary>
/// deserializes as an object
/// </summary>
/// <param name="stream">the stream to deserialize</param>
/// <returns>the deserialized object</returns>
public static object DeserializeFromStream(MemoryStream stream)
{
    IFormatter formatter = new BinaryFormatter();
    stream.Seek(0, SeekOrigin.Begin); …
Run Code Online (Sandbox Code Playgroud)

c# serialization memorystream deserialization

38
推荐指数
3
解决办法
12万
查看次数

如何将复杂对象作为参数传递给RESTful服务?

我已成功设置了一个快速测试,创建一个"类似REST"的服务,返回一个序列化为JSON的对象,这非常简单快捷(基于这篇文章).

但是,虽然返回JSON-ified对象很容易像桃子一样,但我还没有看到任何处理非基本输入参数的例子.如何将复杂对象作为参数传递?我正在使用Apache CXF,但是欢迎使用像Jackson这样的其他框架的例子:)

客户端可能类似于构建javascript对象,将其传递给JSON.stringify(complexObj),并将该字符串作为参数之一传递.

该服务可能看起来像这样

@Service("myService")
class RestService {
    @GET
    @Produces("application/json")
    @Path("/fooBar")
    public Result fooBar(@QueryParam("foo") double foo, @QueryParam("bar") double bar,
        @QueryParam("object") MyComplex object) throws WebServiceException {
    ...
    }
}
Run Code Online (Sandbox Code Playgroud)

将序列化对象作为参数发送可能会快速触及Internet Explorer强加的2KB URL限制.您是否建议在这些情况下使用POST,我是否需要在函数定义中进行更改?

json cxf parameter-passing deserialization

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

json.loads()容易受到任意代码执行的影响吗?

json.loads从Python的标准json模块容易执行任意代码或其他任何安全问题?

我的应用程序可以从不可信赖的来源接收JSON消息.

python serialization json deserialization

36
推荐指数
1
解决办法
6099
查看次数

如何解决延迟作业中的反序列化错误?

我正在尝试使用DelayedJob并且作业失败,在数据库中出现以下错误:

{Delayed::DeserializationError
/Library/Ruby/Gems/1.8/gems/delayed_job-2.1.3/lib/delayed/serialization/active_record.rb:7:in `yaml_new'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/yaml.rb:133:in `transfer'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/yaml.rb:133:in `node_import'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/yaml.rb:133:in `load'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/yaml.rb:133:in `load'
/Library/Ruby/Gems/1.8/gems/delayed_job-2.1.3/lib/delayed/backend/base.rb:79:in `payload_object'
/Library/Ruby/Gems/1.8/gems/delayed_job-2.1.3/lib/delayed/backend/base.rb:87:in `invoke_job_without_newrelic_transaction_trace'
(eval):3:in `invoke_job'
/Library/Ruby/Gems/1.8/gems/newrelic_rpm-2.13.4/lib/new_relic/agent/instrumentation/controller_instrumentation.rb:252:in `perform_action_with_newrelic_trace'
/Library/Ruby/Gems/1.8/gems/newrelic_rpm-2.13.4/lib/new_relic/agent/method_tracer.rb:141:in `trace_execution_scoped'
/Library/Ruby/Gems/1.8/gems/newrelic_rpm-2.13.4/lib/new_relic/agent/instrumentation/controller_instrumentation.rb:247:in `perform_action_with_newrelic_trace'
(eval):2:in `invoke_job'
/Library/Ruby/Gems/1.8/gems/delayed_job-2.1.3/lib/delayed/worker.rb:120:in `run'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/timeout.rb:62:in `timeout'
/Library/Ruby/Gems/1.8/gems/delayed_job-2.1.3/lib/delayed/worker.rb:120:in `run'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/benchmark.rb:308:in `realtime'
/Library/Ruby/Gems/1.8/gems/delayed_job-2.1.3/lib/delayed/worker.rb:119:in `run'
/Library/Ruby/Gems/1.8/gems/delayed_job-2.1.3/lib/delayed/worker.rb:177:in `reserve_and_run_one_job'
/Library/Ruby/Gems/1.8/gems/delayed_job-2.1.3/lib/delayed/worker.rb:104:in `work_off'
/Library/Ruby/Gems/1.8/gems/delayed_job-2.1.3/lib/delayed/worker.rb:103:in `times'
/Library/Ruby/Gems/1.8/gems/delayed_job-2.1.3/lib/delayed/worker.rb:103:in `work_off'
/Library/Ruby/Gems/1.8/gems/delayed_job-2.1.3/lib/delayed/worker.rb:78:in `start'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/benchmark.rb:308:in `realtime'
/Library/Ruby/Gems/1.8/gems/delayed_job-2.1.3/lib/delayed/worker.rb:77:in `start'
/Library/Ruby/Gems/1.8/gems/delayed_job-2.1.3/lib/delayed/worker.rb:74:in `loop'
/Library/Ruby/Gems/1.8/gems/delayed_job-2.1.3/lib/delayed/worker.rb:74:in `start'
/Library/Ruby/Gems/1.8/gems/delayed_job-2.1.3/lib/delayed/tasks.rb:9
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in `call'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in `execute'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in `each'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in `execute'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:597:in `invoke_with_call_chain'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/monitor.rb:242:in `synchronize'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:590:in `invoke_with_call_chain'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:583:in `invoke'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2051:in `invoke_task'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `top_level'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `each'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `top_level'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in …

ruby-on-rails delayed-job deserialization

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

将JSON反序列化为现有对象(Java)

我想知道如何让Jackson JSON库将JSON反序列化为现有对象?我试图找到如何做到这一点; 但它似乎只能采取一个类并自己实例化它.

或者,如果不可能,我想知道是否有任何Java JSON反序列化库可以做到这一点.

这似乎是C#的一个相应问题:将数据从JSON字符串覆盖到现有对象实例.看来JSON.NET有一个PopulateObject(字符串,对象).

java json jackson deserialization

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

序列化 - readObject writeObject覆盖

编写下面的代码后,我现在必须使用自定义的readObject()和writeObject()覆盖StudentData中的方法来读取和写入对象的变量.不使用defaultWriteObject或defaultReadObject方法来执行此操作.

麻烦的是我不完全理解被要求做什么.我已阅读序列化中的readObject/writeObject的使用,但我无法理解它.有人指出我正确的方向吗?

我的代码:

import java.io.*; //importing input-output files

class Student implements java.io.Serializable {

    String name; // declaration of variables
    String DOB;
    int id;

    Student(String naam, int idno, String dob) // Initialising variables to user
                                                // data
    {
        name = naam;
        id = idno;
        DOB = dob;
    }

    public String toString() {
        return name + "\t" + id + "\t" + DOB + "\t";
    }

}
Run Code Online (Sandbox Code Playgroud)
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import …
Run Code Online (Sandbox Code Playgroud)

java serialization deserialization

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

使用JavaScriptSerializer()反序列化JSON文件

我将反序列化的json文件的结构如下所示;

{
    "id" : "1lad07",
    "text" : "test",
    "url" : "http:\/\/twitpic.com\/1lacuz",
    "width" : 220,
    "height" : 84,
    "size" : 8722,
    "type" : "png",
    "timestamp" : "Wed, 05 May 2010 16:11:48 +0000",
    "user" : {
        "id" : 12345,
        "screen_name" : "twitpicuser"
    }
}
Run Code Online (Sandbox Code Playgroud)

我创建了一个类,其字段名称为JavaScriptSerializer的属性.我将用于反序列化json的代码如下:

            using (var reader = new StreamReader(twitpicResponse.GetResponseStream())) {


                var responseBody = reader.ReadToEnd();
                var deserializer = new JavaScriptSerializer();
                var results = deserializer.Deserialize<Response>(responseBody);

            }
Run Code Online (Sandbox Code Playgroud)

我的问题是我如何读取json文件上的用户字段.这就像下面;

"user" : {
    "id" : 12345,
    "screen_name" : "twitpicuser"
}
Run Code Online (Sandbox Code Playgroud)

它有子属性和值.我怎样才能在我的Response类中命名它们.我的回复课现在看起来像这样;

public class Response { …
Run Code Online (Sandbox Code Playgroud)

c# json javascriptserializer deserialization

33
推荐指数
3
解决办法
12万
查看次数

Json.NET:反序列化嵌套字典

将对象反序列化为Dictionary(JsonConvert.DeserializeObject<IDictionary<string,object>>(json))嵌套对象时,将其反序列化为JObjects.是否可以强制嵌套对象反序列化为Dictionarys?

c# serialization json json.net deserialization

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