public PlatformNfcTag ReadPlatformNfcTag()
        {
            var nfcTag = this.GetNfcTag();
            this.CheckForNfcTag(nfcTag);

            using (var ndef = NdefTechnology.Get(nfcTag))
            {
                ndef.Connect();

                var message = ndef.GetNdefMessage();

                if (message != null && message.Length > 0)
                {
                    var ndefRecord = message.Records[0];

                    var nfcTagRecord = NfcTagRecord.ToNfcTagRecord(ndefRecord) as NfcTagRecord;

                    var platformNfcTag = new PlatformNfcTag()
                    {
                        Uid = ndef.TagUIDString(), 
                        ReadOnly = !ndef.IsWritable, 
                        Record = nfcTagRecord
                    };

                    return platformNfcTag;
                }
            }

            return null;
        }
        public PlatformNfcTag EncodeNfcTag(Device device, bool makeReadOnly = true)
        {
            var nfcTag = this.GetNfcTag();
            this.CheckForNfcTag(nfcTag);

            var platformNfcTag = new PlatformNfcTag();

            using (var ndef = NdefTechnology.Get(nfcTag))
            {
                ndef.Connect();

                if (!ndef.IsWritable)
                    throw new ApplicationException("The nfc tag is not writable.");

                platformNfcTag.Uid = ndef.TagUIDString();

                var nfcTagRecord = new NfcTagRecord(device);
                ndef.WriteNdefMessage(nfcTagRecord);

                platformNfcTag.Record = nfcTagRecord;

                if (makeReadOnly && ndef.CanMakeReadOnly)
                {
                    ndef.MakeReadOnly();
                    platformNfcTag.ReadOnly = true;
                }
                else
                {
                    platformNfcTag.ReadOnly = false;
                }
            }

            return platformNfcTag;
        }