Available in the NuGet gallery
: Install by entering Install-Package PeterO.Cbor
in the Package Manager Console.
If you like this software, consider donating to me at this link:
A C# implementation of Concise Binary Object Representation, a general-purpose binary data format defined in RFC 7049. According to that RFC, CBOR's data model "is an extended version of the JSON data model", supporting many more types of data
than JSON. "CBOR was inspired by MessagePack", but "is not intended as a version of or replacement for MessagePack."
This implementation was written by Peter O. and is released to the Public Domain under the
Please Note: Despite the MIT License appearing in the License tab of this page, this project is released to the Public Domain under CC0 (it can be used for any purpose, commercial or noncommercial). CodePlex won't allow me to choose a Public Domain or
Creative Commons Zero option as a license.
This implementation also doubles as a reader and writer of JSON, and can convert data from JSON to CBOR and back.
Finally, this implementation supports arbitrary-precision binary and decimal floating-point numbers and rational numbers with arbitrary-precision components.
How to Install
Starting with version 0.21.0, the C# implementation is available in the
NuGet Package Gallery under the name
. To install
this library as a NuGet package, enter `Install-Package PeterO.Cbor` in the
NuGet Package Manager Console.
This library defines one class, called CBORObject, that allows you to read and
write CBOR objects to and from data streams and byte arrays, and to convert JSON
text to CBOR objects and back.
See the C# (.NET) API documentation
The C# implementation is designed as a Portable Class Library, making it usable not only in the .NET
Framework, but also Silverlight 5 and Windows Phone 8.
Written in 2013-2014 by Peter O.
Any copyright is dedicated to the Public Domain.
If you like this, you should donate to Peter O.
In version 2.2:
- Portable Class Library compatibility expanded
- Add option to always use definite length string encoding when generating CBOR objects
In version 2.1:
- Added Ulp, Precision, MovePointLeft, MovePointRight, and ScaleToPowerOfTwo/-Ten methods to
ExtendedDecimal and ExtendedFloat
- Fixed double-rounding issue with ToDouble and ToFloat methods
- Added Odd and OddOrZeroFiveUp rounding modes
- Added non-decimal base conversion features to BigInteger
- Other bug fixes
In version 2.0:
- Several very special characters are escaped in JSON output, such as line and paragraph
separators, and byte order marks.
- BigInteger's longValue method was fixed
- BigInteger was changed to have no public constructors
- ReadJSON now supports UTF-16 and UTF-32 in addition to UTF-8
- PrecisionContext's JavaBigDecimal object was corrected.
- Fixed bugs in parsing JSON numbers in some cases
- CBORObject's one-argument Add method now adds CBORObject.Null if passed null,
rather than throwing an exception.
In version 1.3:
- Added a CompareToIgnoreTags method to CBORObject
- The BigInteger constructor in the C# version is deprecated
- Fixed bugs in converting from CBOR float and double to integers in some corner cases
- Fixed a bug where CBORObject's OutermostTag returns 0 instead of the correct -1 for untagged objects
- Fixed a bug where BigInteger's bitLength return value can be wrong in some corner cases
In version 1.2:
- The WriteJSON and WriteToJSON methods were added to CBORObject
- Bugs were fixed in the Set and Add methods of CBORObject
In version 1.1 there were many additions and bug fixes in arbitrary-precision
- Added unchecked versions of intValue and longValue in BigInteger
- Added more overloads for FromString in ExtendedDecimal and ExtendedFloat
- Fixed bug where Pow doesn't compute the exact value in unlimited precision contexts
- Much added documentation
In version 1.0, the "adjust exponent" and "is precision in bits" flags were added to
the arbitrary-precision arithmetic contexts, and a new Set method that is similar
to Add but can replace a key's value in a CBOR map. Some bugs were also fixed.
Version 0.23.0 has no new features of note.
Version 0.22.0 adds CBOR support for decimal fractions and big floats with any
exponent, even exponents higher than 65 bits, and implements well-formedness
checking for tag 32 (URIs). Several bugs were also fixed.
The commit history
contains details on code changes in previous versions.