aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.Serialization/JsonDataSerializer.cs
blob: 674f682896547114207f0c1be9ed5fe2abd8fd96 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Tango.Serialization
{
    /// <summary>
    /// Represents a data serializer for serializing data using the light weight textual Json format.
    /// </summary>
    public class JsonDataSerializer : IDataSerializer
    {

        /// <summary>
        /// Serialize object to a file.
        /// </summary>
        /// <typeparam name="T">Type of specified object.</typeparam>
        /// <param name="obj">The specified object.</param>
        /// <param name="filePath">The full path to the file to write.</param>
        public void SerializeToFile<T>(T obj, string filePath)
        {
            using (FileStream fs = new FileStream(filePath, FileMode.Create))
            {
                SerializeToStream<T>(obj, fs);
            }
        }

        /// <summary>
        /// Deserialize object from a file.
        /// </summary>
        /// <typeparam name="T">Type of object to deserialize.</typeparam>
        /// <param name="filePath">The full path of the data file.</param>
        /// <returns>The resulting object.</returns>
        public T DeserializeFromFile<T>(string filePath)
        {
            using (FileStream fs = new FileStream(filePath, FileMode.Open))
            {
                return DeserializeFromStream<T>(fs);
            }
        }

        /// <summary>
        /// Serialize object to stream.
        /// </summary>
        /// <typeparam name="T">Type of specified object.</typeparam>
        /// <param name="obj">The specified object.</param>
        /// <param name="st">The stream to write.</param>
        public void SerializeToStream<T>(T obj, Stream st)
        {
            JsonSerializer serializer = new JsonSerializer();
            using (StreamWriter streamReader = new StreamWriter(st))
            {
                serializer.Serialize(streamReader, obj);
            }
        }

        /// <summary>
        /// Deserialize object from stream.
        /// </summary>
        /// <typeparam name="T">Type of object to deserialize.</typeparam>
        /// <param name="st">Stream to read from.</param>
        /// <returns>The resulting object.</returns>
        public T DeserializeFromStream<T>(Stream st)
        {
            JsonSerializer serializer = new JsonSerializer();
            T data;
            using (StreamReader streamReader = new StreamReader(st))
            {
                data = (T)serializer.Deserialize(streamReader, typeof(T));
            }
            return data;
        }

        /// <summary>
        /// Returns the serializer full name.
        /// </summary>
        /// <returns></returns>
        public override string ToString()
        {
            return SerializationHelper.GetSerializerName(this);
        }

    }
}
<ProjectReference Include="..\..\Tango.SharedUI\Tango.SharedUI.csproj"> <Project>{8491d07b-c1f6-4b62-a412-41b9fd2d6538}</Project> <Name>Tango.SharedUI</Name> </ProjectReference> <ProjectReference Include="..\..\Tango.Transport\Tango.Transport.csproj"> <Project>{74e700b0-1156-4126-be40-ee450d3c3026}</Project> <Name>Tango.Transport</Name> </ProjectReference> <ProjectReference Include="..\..\Tango.Web\Tango.Web.csproj"> <Project>{5001990f-977b-48ff-b217-0236a5022ad8}</Project> <Name>Tango.Web</Name> </ProjectReference> <ProjectReference Include="..\Tango.MachineStudio.Common\Tango.MachineStudio.Common.csproj"> <Project>{cb0b0aa2-bb24-4bca-a720-45e397684e12}</Project> <Name>Tango.MachineStudio.Common</Name> </ProjectReference> </ItemGroup> <ItemGroup> <BootstrapperPackage Include=".NETFramework,Version=v4.6"> <Visible>False</Visible> <ProductName>Microsoft .NET Framework 4.6 %28x86 and x64%29</ProductName> <Install>true</Install> </BootstrapperPackage> <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1"> <Visible>False</Visible> <ProductName>.NET Framework 3.5 SP1</ProductName> <Install>false</Install> </BootstrapperPackage> </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <ProjectExtensions> <VisualStudio> <UserProperties BuildVersion_StartDate="2000/1/1" BuildVersion_UseGlobalSettings="False" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" /> </VisualStudio> </ProjectExtensions> </Project>