Serialization
Problem
Accessing the serialized and deserialized representation of an object can be important for dynamic, data-rich applications. Currently, there is no shared abstract contract between serializers for different data formats (JSON, XML, etc.). As such, it can be difficult to inject an abstraction of a serializer object as a dependency into your view models or services.
Solution
The Uno.Extensions library provides a set of abstractions for serialization and deserialization. This allows you to inject a serializer object as a dependency into your view models or services. The library includes implementations for JSON serialization as well as extension points for creating custom serializers.
App Startup Configuration
public partial class App : Application
{
private void ConfigureAppBuilder(IApplicationBuilder builder)
{
builder
.Configure(host => host
// Code omitted for brevity
// Register Json serializers (ISerializer and ISerializer)
.UseSerialization()
// Code omitted for brevity
);
}
}
### Consume `ISerializer` as dependency in data services
```csharp
public class MockNotificationEndpoints(string basePath, ISerializer serializer) : BaseMockEndpoint
{
public string HandleNotificationsRequest(HttpRequestMessage request)
{
var notificationsData = LoadData("Notifications.json");
var notifications = serializer.FromString<List<NotificationData>>(notificationsData);
//Get all notifications
if (request.RequestUri.AbsolutePath == "/api/notification" && request.Method == HttpMethod.Get)
{
return serializer.ToString(notifications);
}
return "{}";
}
}
Notification JSON data (notifications.json)
{
"Title": "New recipe!",
"Description": "Far far away, behind the word mountains, far from the countries.",
"Read": true,
"Date": "2022-10-18T00:00:00Z"
},
{
"Title": "Don’t forget to try your saved recipe",
"Description": "Far far away, behind the word mountains, far from the countries.",
"Read": true,
"Date": "2022-10-18T00:00:00Z"
},
...
NotificationData model object
public class NotificationData
{
public string? Title { get; set; }
public string? Description { get; set; }
public bool Read { get; set; }
public DateTime Date { get; set; }
}