/// <summary>
        /// Serializes originalDataset to JSON, deserializes, and re-serializes.
        /// Verifies that both datasets are equal, and both json serializations are equal!
        /// </summary>
        private void VerifyJsonTripleTrip(DicomDataset originalDataset, bool expectFail = false)
        {
            string json = DicomTypeTranslater.SerializeDatasetToJson(originalDataset, _jsonDicomConverter);

            _logger.Debug($"Initial json:\n{json}");

            DicomDataset recoDataset = DicomTypeTranslater.DeserializeJsonToDataset(json, _jsonDicomConverter);

            string json2 = DicomTypeTranslater.SerializeDatasetToJson(recoDataset, _jsonDicomConverter);

            _logger.Debug($"Final json:\n{json}");

            if (expectFail)
            {
                Assert.AreNotEqual(json, json2);
            }
            else
            {
                Assert.AreEqual(json, json2);
            }

            // NOTE: Group length elements have been retired from the standard, and have never been included in any JSON conversion.
            // Remove them here to allow comparison between datasets.
            originalDataset.RemoveGroupLengths();

            if (expectFail)
            {
                Assert.False(DicomDatasetHelpers.ValueEquals(originalDataset, recoDataset));
            }
            else
            {
                Assert.True(DicomDatasetHelpers.ValueEquals(originalDataset, recoDataset));
            }
        }
        public void BsonRoundTrip_TagWithMultipleVrs_SameAfterConversion()
        {
            DicomTypeTranslater.SerializeBinaryData = true;

            var usItem = new DicomUnsignedShort(DicomTag.GrayLookupTableDataRETIRED, 0, 1, ushort.MaxValue);
            var owItem = new DicomOtherWord(DicomTag.GrayLookupTableDataRETIRED, 0, 1, ushort.MaxValue);

            Assert.True(usItem.Tag.DictionaryEntry.ValueRepresentations.Length == 3);
            Assert.True(owItem.Tag.DictionaryEntry.ValueRepresentations.Length == 3);

            var usDataset = new DicomDataset {
                usItem
            };
            var owDataset = new DicomDataset {
                owItem
            };

            BsonDocument usDocument = DicomTypeTranslaterReader.BuildBsonDocument(usDataset);
            BsonDocument owDocument = DicomTypeTranslaterReader.BuildBsonDocument(owDataset);

            Assert.NotNull(usDocument);
            Assert.NotNull(owDocument);

            DicomDataset recoUsDataset = DicomTypeTranslaterWriter.BuildDicomDataset(usDocument);
            DicomDataset recoOwDataset = DicomTypeTranslaterWriter.BuildDicomDataset(owDocument);

            Assert.True(DicomDatasetHelpers.ValueEquals(usDataset, recoUsDataset));
            Assert.True(DicomDatasetHelpers.ValueEquals(owDataset, recoOwDataset));
        }
        public void TestMultipleElementSequences()
        {
            var subDatasets = new List <DicomDataset>();

            for (var i = 0; i < 3; i++)
            {
                subDatasets.Add(new DicomDataset
                {
                    { DicomTag.ReferencedSOPClassUID, "ReferencedSOPClassUID-" + (i + 1) },
                    { DicomTag.ReferencedSOPInstanceUID, "ReferencedSOPInstanceUID-" + (i + 1) }
                });
            }

            var originalDataset = new DicomDataset
            {
                { DicomTag.ReferencedImageSequence, subDatasets.ToArray() }
            };

            var translatedDataset = new Dictionary <DicomTag, object>();

            foreach (DicomItem item in originalDataset)
            {
                object value = DicomTypeTranslaterReader.GetCSharpValue(originalDataset, item);
                translatedDataset.Add(item.Tag, value);
            }

            var reconstructedDataset = new DicomDataset();

            foreach (KeyValuePair <DicomTag, object> item in translatedDataset)
            {
                DicomTypeTranslaterWriter.SetDicomTag(reconstructedDataset, item.Key, item.Value);
            }

            Assert.True(DicomDatasetHelpers.ValueEquals(originalDataset, reconstructedDataset));
        }
        private static void VerifyBsonTripleTrip(DicomDataset ds)
        {
            BsonDocument bsonDoc     = DicomTypeTranslaterReader.BuildBsonDocument(ds);
            DicomDataset recoDataset = DicomTypeTranslaterWriter.BuildDicomDataset(bsonDoc);
            BsonDocument recoDoc     = DicomTypeTranslaterReader.BuildBsonDocument(recoDataset);

            Assert.AreEqual(bsonDoc, recoDoc);
            Assert.True(DicomDatasetHelpers.ValueEquals(ds, recoDataset));
        }
        public void TestBlankAndNullSerialization()
        {
            var dataset = new DicomDataset
            {
                new DicomDecimalString(DicomTag.SelectorDSValue, default(string)),
                new DicomIntegerString(DicomTag.SelectorISValue, ""),
                new DicomFloatingPointSingle(DicomTag.SelectorFLValue, default(float)),
                new DicomFloatingPointDouble(DicomTag.SelectorFDValue)
            };

            string json = DicomTypeTranslater.SerializeDatasetToJson(dataset, _jsonDicomConverter);

            _logger.Debug(json);

            DicomDataset recoDataset = DicomTypeTranslater.DeserializeJsonToDataset(json, _jsonDicomConverter);

            Assert.True(DicomDatasetHelpers.ValueEquals(dataset, recoDataset));
        }