OutWit.Common.ProtoBuf
1.0.1
dotnet add package OutWit.Common.ProtoBuf --version 1.0.1
NuGet\Install-Package OutWit.Common.ProtoBuf -Version 1.0.1
<PackageReference Include="OutWit.Common.ProtoBuf" Version="1.0.1" />
<PackageVersion Include="OutWit.Common.ProtoBuf" Version="1.0.1" />
<PackageReference Include="OutWit.Common.ProtoBuf" />
paket add OutWit.Common.ProtoBuf --version 1.0.1
#r "nuget: OutWit.Common.ProtoBuf, 1.0.1"
#:package OutWit.Common.ProtoBuf@1.0.1
#addin nuget:?package=OutWit.Common.ProtoBuf&version=1.0.1
#tool nuget:?package=OutWit.Common.ProtoBuf&version=1.0.1
OutWit.Common.ProtoBuf
A .NET library that provides a set of utilities and wrapper classes to simplify serialization tasks using protobuf-net. This package offers convenient extension methods, pre-configured surrogates for common types, and serializable collection classes.
Features
- Simplified Serialization: Extension methods (
ToProtoBytes
,FromProtoBytes
) to easily serialize objects to byte arrays and deserialize them back. - Deep Cloning: A convenient
ProtoClone
extension method that uses serialization to perform a deep copy of an object. - File I/O: Helpers to export and load collections directly to/from files (
ExportAsProtoBuf
,LoadAsProtoBuf
). - Built-in Surrogates: Out-of-the-box serialization support for
DateTimeOffset
andPropertyChangedEventArgs
. - Easy Configuration: A simple registration pattern to add your own custom surrogates or subtypes.
Installation
This library is intended to be used as a NuGet package. You can add it to your project using the .NET CLI:
dotnet add package OutWit.Common.ProtoBuf
Usage
Basic Serialization and Deserialization
The library extends any object with ToProtoBytes()
and FromProtoBytes<T>()
methods.
// Assuming you have a class marked with ProtoContract
[ProtoContract]
public class Person
{
[ProtoMember(1)]
public string Name { get; set; }
[ProtoMember(2)]
public int Age { get; set; }
}
// --- Usage ---
var originalPerson = new Person { Name = "John Doe", Age = 30 };
// Serialize the object to a byte array
byte[] data = originalPerson.ToProtoBytes();
// Deserialize the byte array back to an object
var deserializedPerson = data.FromProtoBytes<Person>();
Console.WriteLine($"Deserialized Person: {deserializedPerson.Name}, Age: {deserializedPerson.Age}");
Cloning Objects
Perform a deep clone on any serializable object.
var originalPerson = new Person { Name = "Jane Doe", Age = 25 };
// Create a deep clone
var clonedPerson = originalPerson.ProtoClone();
// 'clonedPerson' is a new instance with the same data
// 'originalPerson != clonedPerson' will be true
Registering Custom Surrogates
If you need to serialize a type that you cannot directly annotate with [ProtoContract]
(e.g., a type from a third-party library), you can register a surrogate.
// The type you want to serialize
public class ThirdPartyPoint
{
public int X { get; set; }
public int Y { get; set; }
}
// A surrogate with a compatible data structure
[ProtoContract]
public class PointSurrogate
{
[ProtoMember(1)]
public int X { get; set; }
[ProtoMember(2)]
public int Y { get; set; }
// Conversion operators
public static implicit operator ThirdPartyPoint(PointSurrogate surrogate)
{
return new ThirdPartyPoint { X = surrogate.X, Y = surrogate.Y };
}
public static implicit operator PointSurrogate(ThirdPartyPoint original)
{
return new PointSurrogate { X = original.X, Y = original.Y };
}
}
// --- Registration (at application startup) ---
ProtoBufUtils.Register(options =>
{
options.RegisterSurrogate<ThirdPartyPoint, PointSurrogate>();
});
// Now you can serialize/deserialize ThirdPartyPoint objects
var point = new ThirdPartyPoint { X = 10, Y = 20 };
byte[] data = point.ToProtoBytes();
var newPoint = data.FromProtoBytes<ThirdPartyPoint>();
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.3)
- OutWit.Common.Aspects (>= 1.2.2)
- protobuf-net (>= 3.2.52)
-
net6.0
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.3)
- OutWit.Common.Aspects (>= 1.2.2)
- protobuf-net (>= 3.2.52)
-
net7.0
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.3)
- OutWit.Common.Aspects (>= 1.2.2)
- protobuf-net (>= 3.2.52)
-
net8.0
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.3)
- OutWit.Common.Aspects (>= 1.2.2)
- protobuf-net (>= 3.2.52)
-
net9.0
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.3)
- OutWit.Common.Aspects (>= 1.2.2)
- protobuf-net (>= 3.2.52)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on OutWit.Common.ProtoBuf:
Package | Downloads |
---|---|
OutWit.Communication
The core communication library of the WitRPC framework, providing base RPC functionality such as messaging, dynamic proxy support, and extensibility for multiple transports, serialization formats, and encryption. |
GitHub repositories
This package is not used by any popular GitHub repositories.