I am using Json.NET to serialize an object graph. For each object that is serialized or deserialized, I want to call a method on that object before the serialization takes place. For e.g. all my objects implement an interface INotified with a method OnSerializing. I want OnSerializing to be called before the object is serialized.
Is there a way to achieve this without having to touch the Json.NET source code?
The latest version of Json.NET supports serialization callbacks.
Related
I want to use Jackson API to convert scala object to json. I have used the Jackson API 1.9.13 (jackson-core-asl, jackson-mapper-asl jars) to convert java object to json and vice versa. However I am not able to find jars to convert from scala object to json. Does any one have idea about this? Thanks.
I created a Java class and wrote a function to build JSON using Jackson API 1.9.13. The function returns the Json String.
Then created the object in Scala and called the Java-To-Json conversion function in the Java class. It worked just fine.
I need to parse the jax-ws rest response and I tried the following two ways of parsing the response.Both works good.But I am in need to know the best efficient way of implementation.Please provide me your view.
First Approach:
Use getEntity Object and get the response as Input Stream.
Using Jackson ObjectMapper readValue() -covert the inputstream to java
object.
Using getters and setters of nested java class get the response objects member values.
Second Approach:
Use getEntity Object and get the response as Input Stream and and
convert the Input Stream to String.
Using Google Json API,convert the string to json object.
Using Json parser and get the nested objects member values.
I would say the first approach is better for two reasons:
You don't go through the intermediate process of reading the response payload into String
The setter methods that are called during Jackson deserialization may perform validation on input and throw appropriate exceptions, so you do validation during deserialization.
Maybe not a general answer to this question but another variant of what you're describing under "First approach". I would start with a generic data structure and would only introduce an extra bean if necessary. I wouldn't use String to pass structured data around.
Use jackson to convert the JSON response to a
Map<String,Object> or JsonNode.
Advantage:
You don't need to implement a specialized bean class. Even a very simple bean can become unhandy over time (if format changes or new nested structures are added to the json response, etc.). It also introduces some kind of metaphor to your code which sometimes helps but also can be misleading.
Map<String,Object> is in the JDK and offers a good interface to access data. You don't have to change any interfaces even if the JSON format changes.
You can always pass your data in form of a Map<String,Object>
Disadvantage
Data Encapsulation. The map is a very close representation of the input data and therefore offers not same level of abstraction like a bean.
Does smooks support json output or thirdparty plugin for json?
For example, to do XML-to-JSON or EDI-to-JSON
I see it has json reader/parser, but can't seem to find an output/writer.
TIA!
Not directly, but it would support populating of a Java Object model from e.g. XML or EDI and then you could use something like Jackson to serialize the Java to JSON. So should be easy enough to do once you get the data into a Java Object model.
Also note that you do not need to create an actual Java Object model. You can create what Smooks calls a "virtual object model", which is basically collection types (Maps, Lists etc).
I need to deserialize some JSON objects. I tried to use Tiny-json library, but it's too slow. I tried to use Newtonsoft.Json, but it fails in webplayer with this error:
MissingMethodException: Method not found: 'System.Collections.ObjectModel.KeyedCollection.
What JSON parser do you recommend?
You can try one of these open source solutions:
https://github.com/jacobdufault/fullserializer
https://github.com/mtschoen/JSONObject (https://www.assetstore.unity3d.com/en/#!/content/710) I am using this one most of the times, it's versbose but does its job well, not sure about performance however
Or go with paid ones:
https://www.assetstore.unity3d.com/en/#!/content/11347
Unity 5.3 added Native support of Json Serializer. It is faster than others.
JsonUtility.ToJson to convert a class to Json.
JsonUtility.FromJson to convert Json back to class.
For complete example and information regarding json arrays, see
Serialize and Deserialize Json and Json Array in Unity
I am using Jackson to parse a JSON object. It works perfectly but in bean class one of the member variables is dynamic. This means sometimes my json attribute returns an array of strings and sometimes same attribute return map<String,Object>.
How do I define Setter & Getter method in Beans for this attribute?
Use getter/setter that take/return Object, Jackson will by default determine the type from the json stream.
The only problem is that Jackson will deserialize to a list and not an array (you can however convert it to an array in the setter).
If you really want an array by default, you can have a look at Genson library http://code.google.com/p/genson/