diff --git a/MediaBrowser.ApiInteraction.Metro/MediaBrowser.ApiInteraction.Metro.csproj b/MediaBrowser.ApiInteraction.Metro/MediaBrowser.ApiInteraction.Metro.csproj index 9d866607aa..45a64f3745 100644 --- a/MediaBrowser.ApiInteraction.Metro/MediaBrowser.ApiInteraction.Metro.csproj +++ b/MediaBrowser.ApiInteraction.Metro/MediaBrowser.ApiInteraction.Metro.csproj @@ -45,6 +45,9 @@ DataSerializer.cs + + SerializationFormats.cs + diff --git a/MediaBrowser.ApiInteraction/ApiClient.cs b/MediaBrowser.ApiInteraction/ApiClient.cs index 80ea82ca27..7145c14654 100644 --- a/MediaBrowser.ApiInteraction/ApiClient.cs +++ b/MediaBrowser.ApiInteraction/ApiClient.cs @@ -45,11 +45,11 @@ namespace MediaBrowser.ApiInteraction /// /// Gets the data format to request from the server /// - private SerializationFormat SerializationFormat + private SerializationFormats SerializationFormat { get { - return ApiInteraction.SerializationFormat.Protobuf; + return ApiInteraction.SerializationFormats.Protobuf; } } @@ -585,11 +585,11 @@ namespace MediaBrowser.ApiInteraction string url = ApiUrl + "/ServerConfiguration"; // At the moment this can't be retrieved in protobuf format - SerializationFormat format = SerializationFormat.Jsv; + SerializationFormats format = DataSerializer.CanDeSerializeJsv ? SerializationFormats.Jsv : SerializationFormats.Json; using (Stream stream = await GetSerializedStreamAsync(url, format).ConfigureAwait(false)) { - return DeserializeFromStream(stream, format); + return DataSerializer.DeserializeFromStream(stream, format); } } @@ -601,11 +601,11 @@ namespace MediaBrowser.ApiInteraction string url = ApiUrl + "/PluginConfiguration?assemblyfilename=" + plugin.AssemblyFileName; // At the moment this can't be retrieved in protobuf format - SerializationFormat format = SerializationFormat.Jsv; + SerializationFormats format = DataSerializer.CanDeSerializeJsv ? SerializationFormats.Jsv : SerializationFormats.Json; using (Stream stream = await GetSerializedStreamAsync(url, format).ConfigureAwait(false)) { - return DeserializeFromStream(stream, format, configurationType); + return DataSerializer.DeserializeFromStream(stream, format, configurationType); } } @@ -659,7 +659,7 @@ namespace MediaBrowser.ApiInteraction /// /// This is a helper around getting a stream from the server that contains serialized data /// - private Task GetSerializedStreamAsync(string url, SerializationFormat serializationFormat) + private Task GetSerializedStreamAsync(string url, SerializationFormats serializationFormat) { if (url.IndexOf('?') == -1) { @@ -675,35 +675,7 @@ namespace MediaBrowser.ApiInteraction private T DeserializeFromStream(Stream stream) { - return DeserializeFromStream(stream, SerializationFormat); - } - - private T DeserializeFromStream(Stream stream, SerializationFormat format) - { - if (format == ApiInteraction.SerializationFormat.Protobuf) - { - return DataSerializer.DeserializeProtobufFromStream(stream); - } - if (format == ApiInteraction.SerializationFormat.Jsv) - { - return DataSerializer.DeserializeJsvFromStream(stream); - } - - return DataSerializer.DeserializeJsonFromStream(stream); - } - - private object DeserializeFromStream(Stream stream, SerializationFormat format, Type type) - { - if (format == ApiInteraction.SerializationFormat.Protobuf) - { - throw new NotImplementedException(); - } - if (format == ApiInteraction.SerializationFormat.Jsv) - { - return DataSerializer.DeserializeJsvFromStream(stream, type); - } - - return DataSerializer.DeserializeJsonFromStream(stream, type); + return DataSerializer.DeserializeFromStream(stream, SerializationFormat); } /// diff --git a/MediaBrowser.ApiInteraction/DataSerializer.cs b/MediaBrowser.ApiInteraction/DataSerializer.cs index 15039cd45a..45fd60ecfa 100644 --- a/MediaBrowser.ApiInteraction/DataSerializer.cs +++ b/MediaBrowser.ApiInteraction/DataSerializer.cs @@ -7,30 +7,33 @@ namespace MediaBrowser.ApiInteraction { public static class DataSerializer { - public static T DeserializeJsonFromStream(Stream stream) + public static T DeserializeFromStream(Stream stream, SerializationFormats format) { + if (format == ApiInteraction.SerializationFormats.Protobuf) + { + return Serializer.Deserialize(stream); + } + if (format == ApiInteraction.SerializationFormats.Jsv) + { + return TypeSerializer.DeserializeFromStream(stream); + } + return JsonSerializer.DeserializeFromStream(stream); } - public static T DeserializeJsvFromStream(Stream stream) + public static object DeserializeFromStream(Stream stream, SerializationFormats format, Type type) { - return TypeSerializer.DeserializeFromStream(stream); - } + if (format == ApiInteraction.SerializationFormats.Protobuf) + { + throw new NotImplementedException(); + } + if (format == ApiInteraction.SerializationFormats.Jsv) + { + return TypeSerializer.DeserializeFromStream(type, stream); + } - public static object DeserializeJsvFromStream(Stream stream, Type type) - { - return TypeSerializer.DeserializeFromStream(type, stream); - } - - public static object DeserializeJsonFromStream(Stream stream, Type type) - { return JsonSerializer.DeserializeFromStream(type, stream); } - - public static T DeserializeProtobufFromStream(Stream stream) - { - return Serializer.Deserialize(stream); - } public static void Configure() { @@ -38,12 +41,13 @@ namespace MediaBrowser.ApiInteraction JsConfig.ExcludeTypeInfo = true; JsConfig.IncludeNullValues = false; } - } - public enum SerializationFormat - { - Json, - Jsv, - Protobuf + public static bool CanDeSerializeJsv + { + get + { + return true; + } + } } } diff --git a/MediaBrowser.ApiInteraction/MediaBrowser.ApiInteraction.csproj b/MediaBrowser.ApiInteraction/MediaBrowser.ApiInteraction.csproj index 62a60f86cc..228ee6754f 100644 --- a/MediaBrowser.ApiInteraction/MediaBrowser.ApiInteraction.csproj +++ b/MediaBrowser.ApiInteraction/MediaBrowser.ApiInteraction.csproj @@ -49,6 +49,7 @@ + diff --git a/MediaBrowser.ApiInteraction/SerializationFormats.cs b/MediaBrowser.ApiInteraction/SerializationFormats.cs new file mode 100644 index 0000000000..21eb210d05 --- /dev/null +++ b/MediaBrowser.ApiInteraction/SerializationFormats.cs @@ -0,0 +1,10 @@ + +namespace MediaBrowser.ApiInteraction +{ + public enum SerializationFormats + { + Json, + Jsv, + Protobuf + } +}