Skip to content

Commit 2bf4a8c

Browse files
committed
Merge remote-tracking branch 'origin/master'
2 parents 9355268 + 51c5789 commit 2bf4a8c

File tree

8 files changed

+61
-27
lines changed

8 files changed

+61
-27
lines changed

src/Exceptionless/Dependency/DependencyResolver.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ public static void RegisterDefaultServices(IDependencyResolver resolver) {
3333
var jsonSerializer = new Lazy<IJsonSerializer>(() => resolver.Resolve<DefaultJsonSerializer>());
3434
resolver.Register(typeof(IJsonSerializer), () => jsonSerializer.Value);
3535

36+
var storageSerializer = new Lazy<IStorageSerializer>(() => resolver.Resolve<DefaultJsonSerializer>());
37+
resolver.Register(typeof(IStorageSerializer), () => storageSerializer.Value);
38+
3639
var eventQueue = new Lazy<IEventQueue>(() => resolver.Resolve<DefaultEventQueue>());
3740
resolver.Register(typeof(IEventQueue), () => eventQueue.Value);
3841

src/Exceptionless/Dependency/DependencyResolverExtensions.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,10 @@ public static IJsonSerializer GetJsonSerializer(this IDependencyResolver resolve
7070
return resolver.Resolve<IJsonSerializer>() ?? resolver.Resolve<DefaultJsonSerializer>();
7171
}
7272

73+
public static IStorageSerializer GetStorageSerializer(this IDependencyResolver resolver) {
74+
return resolver.Resolve<IStorageSerializer>() ?? resolver.Resolve<DefaultJsonSerializer>();
75+
}
76+
7377
public static IEventQueue GetEventQueue(this IDependencyResolver resolver) {
7478
return resolver.Resolve<IEventQueue>() ?? resolver.Resolve<DefaultEventQueue>();
7579
}

src/Exceptionless/Serializer/DefaultJsonSerializer.cs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
using Exceptionless.Json.Serialization;
1111

1212
namespace Exceptionless.Serializer {
13-
public class DefaultJsonSerializer : IJsonSerializer {
13+
public class DefaultJsonSerializer : IJsonSerializer, IStorageSerializer {
1414
private readonly JsonSerializerSettings _serializerSettings;
1515

1616
public DefaultJsonSerializer() {
@@ -25,6 +25,22 @@ public DefaultJsonSerializer() {
2525
_serializerSettings.Converters.Add(new RequestInfoConverter());
2626
}
2727

28+
public virtual void Serialize<T>(T data, Stream outputStream) {
29+
using (var writer = new StreamWriter(outputStream)) {
30+
writer.Write(Serialize(data));
31+
}
32+
}
33+
34+
public virtual T Deserialize<T>(Stream inputStream) {
35+
using (var reader = new StreamReader(inputStream)) {
36+
var json = reader.ReadToEnd();
37+
if (String.IsNullOrWhiteSpace(json))
38+
return default(T);
39+
40+
return JsonConvert.DeserializeObject<T>(json, _serializerSettings);
41+
}
42+
}
43+
2844
public virtual string Serialize(object model, string[] exclusions = null, int maxDepth = 10, bool continueOnSerializationError = true) {
2945
if (model == null)
3046
return null;
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
using System.IO;
2+
3+
namespace Exceptionless.Serializer {
4+
public interface IStorageSerializer{
5+
void Serialize<T>(T data, Stream output);
6+
T Deserialize<T>(Stream input);
7+
}
8+
}

src/Exceptionless/Storage/FolderObjectStorage.cs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System.IO;
55
using Exceptionless.Dependency;
66
using Exceptionless.Extensions;
7+
using Exceptionless.Models;
78
using Exceptionless.Utility;
89

910
namespace Exceptionless.Storage {
@@ -34,13 +35,11 @@ public T GetObject<T>(string path) where T : class {
3435
throw new ArgumentNullException("path");
3536

3637
try {
37-
var json = File.ReadAllText(Path.Combine(Folder, path));
38-
if (String.IsNullOrEmpty(json))
39-
return null;
40-
41-
var serializer = _resolver.GetJsonSerializer();
42-
return serializer.Deserialize<T>(json);
43-
} catch (Exception ex) {
38+
using (var reader = File.OpenRead(Path.Combine(Folder, path))) {
39+
return _resolver.GetStorageSerializer().Deserialize<T>(reader);
40+
}
41+
}
42+
catch (Exception ex) {
4443
_resolver.GetLog().Error(ex.Message, exception: ex);
4544
return null;
4645
}
@@ -71,10 +70,11 @@ public bool SaveObject<T>(string path, T value) where T : class {
7170
Directory.CreateDirectory(directory);
7271

7372
try {
74-
var serializer = _resolver.GetJsonSerializer();
75-
string json = serializer.Serialize(value);
76-
File.WriteAllText(Path.Combine(Folder, path), json);
77-
} catch (Exception ex) {
73+
using (var writer = File.OpenWrite(Path.Combine(Folder, path))) {
74+
_resolver.GetStorageSerializer().Serialize(value, writer);
75+
}
76+
}
77+
catch (Exception ex) {
7878
_resolver.GetLog().Error(ex.Message, exception: ex);
7979
return false;
8080
}

src/Exceptionless/Storage/IsolatedStorageObjectStorage.cs

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,19 @@
66
using System.IO.IsolatedStorage;
77
using System.Linq;
88
using System.Reflection;
9+
using System.Text;
910
using System.Text.RegularExpressions;
1011
using Exceptionless.Dependency;
1112
using Exceptionless.Extensions;
13+
using Exceptionless.Models;
1214
using Exceptionless.Storage;
1315
using Exceptionless.Utility;
1416

1517
namespace Exceptionless.Storage {
1618
public class IsolatedStorageObjectStorage : IObjectStorage {
1719
private readonly object _lockObject = new object();
1820
private readonly IDependencyResolver _resolver;
21+
private static readonly Encoding _encodingUTF8NoBOM = new UTF8Encoding(false, true);
1922

2023
public IsolatedStorageObjectStorage(IDependencyResolver resolver) {
2124
_resolver = resolver;
@@ -97,21 +100,20 @@ public T GetObject<T>(string path) where T : class {
97100
throw new ArgumentNullException("path");
98101

99102
try {
100-
var json = Run.WithRetries(() => {
103+
var buffer = Run.WithRetries(() => {
101104
using (var store = GetIsolatedStorage()) {
102105
using (var stream = new IsolatedStorageFileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite, store)) {
103-
using (var reader = new StreamReader(stream)) {
104-
return reader.ReadToEnd();
106+
using (var memory = new MemoryStream()) {
107+
stream.CopyTo(memory);
108+
return memory.ToArray();
105109
}
106110
}
107111
}
108112
});
109113

110-
if (String.IsNullOrEmpty(json))
111-
return null;
112-
113-
var serializer = _resolver.GetJsonSerializer();
114-
return serializer.Deserialize<T>(json);
114+
if (buffer == null || buffer.Length == 0)
115+
return default(T);
116+
return _resolver.GetStorageSerializer().Deserialize<T>(new MemoryStream(buffer));
115117
} catch (Exception ex) {
116118
_resolver.GetLog().Error(ex.Message, exception: ex);
117119
return null;
@@ -123,11 +125,12 @@ public bool SaveObject<T>(string path, T value) where T : class {
123125
throw new ArgumentNullException("path");
124126

125127
EnsureDirectory(path);
126-
127-
string json;
128+
byte[] buffer;
128129
try {
129-
var serializer = _resolver.GetJsonSerializer();
130-
json = serializer.Serialize(value);
130+
using (var memory = new MemoryStream()) {
131+
_resolver.GetStorageSerializer().Serialize(value, memory);
132+
buffer = memory.ToArray();
133+
}
131134
} catch (Exception ex) {
132135
_resolver.GetLog().Error(ex.Message, exception: ex);
133136
return false;
@@ -138,9 +141,7 @@ public bool SaveObject<T>(string path, T value) where T : class {
138141
Run.WithRetries(() => {
139142
using (var store = GetIsolatedStorage()) {
140143
using (var stream = new IsolatedStorageFileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read, store)) {
141-
using (var streamWriter = new StreamWriter(stream)) {
142-
streamWriter.Write(json);
143-
}
144+
stream.Write(buffer,0,buffer.Length);
144145
}
145146
}
146147
});

test/Exceptionless.Tests/Storage/FolderFileStorageTests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public class FolderFileStorageTests : FileStorageTestsBase {
1212
protected override IObjectStorage GetStorage() {
1313
var resolver = new DefaultDependencyResolver();
1414
resolver.Register<IJsonSerializer, DefaultJsonSerializer>();
15+
resolver.Register<IStorageSerializer, DefaultJsonSerializer>();
1516
return new FolderObjectStorage(resolver, "temp");
1617
}
1718

test/Exceptionless.Tests/Storage/IsolatedStorageFileStorageTests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ public class IsolatedStorageFileStorageTests : FileStorageTestsBase {
88
protected override IObjectStorage GetStorage() {
99
var resolver = new DefaultDependencyResolver();
1010
resolver.Register<IJsonSerializer, DefaultJsonSerializer>();
11+
resolver.Register<IStorageSerializer, DefaultJsonSerializer>();
1112
return new IsolatedStorageObjectStorage(resolver);
1213
}
1314
}

0 commit comments

Comments
 (0)