File: SerializationHelper.cs

package info (click to toggle)
smuxi 1.2.1-2
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 29,740 kB
  • sloc: cs: 224,096; xml: 15,231; sh: 4,413; makefile: 2,446
file content (102 lines) | stat: -rw-r--r-- 4,910 bytes parent folder | download | duplicates (5)
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
//-----------------------------------------------------------------------
// <copyright file="SerializationHelper.cs" company="Patrick 'Ricky' Smith">
//  This file is part of the Twitterizer library (http://www.twitterizer.net/)
// 
//  Copyright (c) 2010, Patrick "Ricky" Smith (ricky@digitally-born.com)
//  All rights reserved.
//  
//  Redistribution and use in source and binary forms, with or without modification, are 
//  permitted provided that the following conditions are met:
// 
//  - Redistributions of source code must retain the above copyright notice, this list 
//    of conditions and the following disclaimer.
//  - Redistributions in binary form must reproduce the above copyright notice, this list 
//    of conditions and the following disclaimer in the documentation and/or other 
//    materials provided with the distribution.
//  - Neither the name of the Twitterizer nor the names of its contributors may be 
//    used to endorse or promote products derived from this software without specific 
//    prior written permission.
// 
//  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
//  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
//  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
//  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
//  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
//  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
//  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
//  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
//  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
//  POSSIBILITY OF SUCH DAMAGE.
// </copyright>
// <author>Ricky Smith</author>
// <summary>The serialization helper class.</summary>
//-----------------------------------------------------------------------

namespace Twitterizer.Core
{
    using System.IO;
    using System.Net;
    using System.Text;
    using Newtonsoft.Json;
    using Newtonsoft.Json.Linq;

    /// <summary>
    /// The Serialization Helper class. Provides a simple interface for common serialization tasks.
    /// </summary>
    /// <typeparam name="T">The type of object to be deserialized</typeparam>
    internal static class SerializationHelper<T>
        where T : ITwitterObject
    {
        /// <summary>
        /// The JavascriptConversionDelegate. The delegate is invokes when using the JavaScriptSerializer to manually construct a result object.
        /// </summary>
        /// <param name="value">Contains nested dictionary objects containing deserialized values for manual parsing.</param>
        /// <returns>A strongly typed object representing the deserialized data of type T</returns>
        public delegate T DeserializationHandler(JObject value);

        /// <summary>
        /// Deserializes the specified web response.
        /// </summary>
        /// <param name="webResponseData">The web response data.</param>
        /// <param name="deserializationHandler">The deserialization handler.</param>
        /// <returns>
        /// A strongly typed object representing the deserialized data of type <typeparamref name="T"/>
        /// </returns>
        public static T Deserialize(byte[] webResponseData, DeserializationHandler deserializationHandler)
        {
            T resultObject;

            // Deserialize the results.
            if (deserializationHandler == null)
            {
#if !SILVERLIGHT
                resultObject = JsonConvert.DeserializeObject<T>(Encoding.UTF8.GetString(webResponseData));
#else
                resultObject = JsonConvert.DeserializeObject<T>(Encoding.UTF8.GetString(webResponseData, 0, webResponseData.Length));
#endif
            }
            else
            {
#if !SILVERLIGHT
                resultObject = deserializationHandler((JObject)JsonConvert.DeserializeObject(Encoding.UTF8.GetString(webResponseData)));
#else
                resultObject = deserializationHandler((JObject)JsonConvert.DeserializeObject(Encoding.UTF8.GetString(webResponseData, 0, webResponseData.Length)));
#endif
            }

            return resultObject;
        }

        /// <summary>
        /// Deserializes the specified web response.
        /// </summary>
        /// <param name="webResponseData">The web response data.</param>
        /// <returns>
        /// A strongly typed object representing the deserialized data of type <typeparamref name="T"/>
        /// </returns>
        public static T Deserialize(byte[] webResponseData)
        {
            return Deserialize(webResponseData, null);
        }
    }
}