Here is how to serialize and deserialize a JSON object to and from a string
Can use with attributes:
Serializing/Deserializing to a file using some extension methods
string json = JsonConvert.SerializeObject(target, Formatting.Indented); // Serialize to a string var reconstituted = JsonConvert.DeserializeObject<ClassOfTarget>(json); // Deserialize from a stringDocumentation is here: http://www.newtonsoft.com/json/help/html/Introduction.htm
Can use with attributes:
[DataContract] // ONLY 'marked' properties are serialized in this case
public class ClassOfTarget
{
...
[DataMember] // Use this attribute to 'mark' a property
public Dictionary<string, string> Mappings { get; set; }
...
}
Newtonsoft JSON serializer will recognise these Microsoft attributes and they also have a few of their own they will recognise as well.Serializing/Deserializing to a file using some extension methods
using Newtonsoft.Json;
public static class JsonExtensions
{
public static void WriteToJsonFile<T>(
this T objectToWrite,
string filePath
// This next parameter is optional but ensures that
// when you have types mixed with their derived types
// they can be serialized as well
bool derivedTypesPresent = false)
where T : new()
{
FileInfo file = new FileInfo(filePath);
Debug.Assert(!file.Exists);
try
{
// Serialize JSON directly to a file
using (StreamWriter sw = new StreamWriter(file.FullName))
{
using (JsonWriter writer = new JsonTextWriter(sw))
{
JsonSerializer serializer = new JsonSerializer();
serializer.Formatting = Formatting.Indented;
if (derivedTypesPresent) // Store type info in JSON
serializer.TypeNameHandling = TypeNameHandling.All;
// target is the object you want serialized
serializer.Serialize(writer, objectToWrite);
}
}
}
catch (JsonSerializationException ex)
{
Trace.WriteLine($"Json Serialization Exception occurred: {ex}");
}
}
public static T ReadFromJsonFile<T>(
this string filePath
// This next parameter is optional but ensures that
// when you have types mixed with their derived types
// they can be serialized as well
bool derivedTypesPresent = false)
where T : class, new()
{
FileInfo file = new FileInfo(filePath);
Debug.Assert(file.Exists);
T reconstituted = null;
try
{
// deserialize JSON directly from a file
using (var reader = file.OpenText())
{
var serializer = new JsonSerializer();
if (derivedTypesPresent) // Store type info in JSON
serializer.TypeNameHandling = TypeNameHandling.All;
reconstituted = (T)serializer.Deserialize(reader, typeof(T));
}
}
catch (JsonSerializationException ex)
{
Trace.WriteLine($"Json Serialization Exception occurred: {ex}");
}
return reconstituted;
}
public static string WriteToJsonString<T>(
this T objectToWrite,
//This parameter is optional but ensures that
//when you have types mixed with their derived types
// they can be serialized as well
bool derivedTypesPresent = false)
where T : new()
{
string json = "";
Debug.Assert(objectToWrite != null);
try
{
var serializerSettings = new JsonSerializerSettings();
serializerSettings.DefaultValueHandling = DefaultValueHandling.IgnoreAndPopulate;
if (derivedTypesPresent) // Then store type info in JSON as well
serializerSettings.TypeNameHandling = TypeNameHandling.All;
// Serialize to a string
json = JsonConvert.SerializeObject(objectToWrite, Formatting.None);
}
catch (JsonSerializationException ex)
{
Trace.WriteLine($"Json Serialization Exception occurred: {ex}");
}
return json.ToString();
}
public static T ReadFromJsonString<T>(
this string json,
bool derivedTypesPresent = false)
where T : class, new()
{
Debug.Assert(!string.IsNullOrWhiteSpace(json));
T reconstituted = null;
try
{
var serializerSettings = new JsonSerializerSettings();
serializerSettings.DefaultValueHandling = DefaultValueHandling.
IgnoreAndPopulate;
if (derivedTypesPresent) // Then store type info in JSON as well
serializerSettings.TypeNameHandling = TypeNameHandling.All;
reconstituted = JsonConvert.DeserializeObject<T>(json,
serializerSettings);
}
catch (JsonSerializationException ex)
{
Trace.WriteLine($"Json Serialization Exception occurred: {ex}");
}
return reconstituted;
}
}
And to serialise and deserialise to and from a file:
StarSystem myObject = new StarSystem(...); // To write an object to a json file myObject.WriteToJsonFile<StarSystem>(filePath); // To read an object from a jsonfile myObject = filePath.ReadFromJsonFile<StarSystem>();And to serialise and deserialise to and from a string:
StarSystem myObject = new StarSystem(...); // To write an object to a json string string json = myObject.WriteToJsonString<StarSystem>(); // To read an object from a json string myObject = json.ReadFromJsonString<StarSystem>();To convert the JSON to XML, use the JSON string like so
// To convert the JSON to XML string json = .... XNode node = JsonConvert.DeserializeXNode(json, "Title"); string xml = node.ToString();
No comments:
Post a Comment