//----------------------------------------------------------------------------------------
        // ScoreDetails
        //----------------------------------------------------------------------------------------

        // see SQLiteMatchDAO.java/commitMatch. We're a little simpler here because the C# type system is
        // stronger than the Java type system
        public byte[] EncodeScoreDetails()
        {
            FMSScoreDetails details = new FMSScoreDetails();

            details.RedAllianceScore  = new FMSSkystoneScoreDetail(RedScores, BlueScores.PenaltyPoints);
            details.BlueAllianceScore = new FMSSkystoneScoreDetail(BlueScores, RedScores.PenaltyPoints);

            using MemoryStream ms = new MemoryStream();
            using (GZipStream gzipOut = new GZipStream(ms, CompressionMode.Compress))
            {
                DefaultContractResolver contractResolver = new DefaultContractResolver
                {
                    NamingStrategy = new UpperCamelCaseNamingStrategy(true, false),
                };
                JsonSerializer serializer = JsonSerializer.Create(new JsonSerializerSettings
                {
                    ContractResolver = contractResolver
                });
                using BsonDataWriter bsonDataWriter = new BsonDataWriter(gzipOut);
                serializer.Serialize(bsonDataWriter, details);
            }

            byte[] result = ms.ToArray();
            return(result);
        }
        public FMSScoreDetails DecodeScoreDetails()
        {
            using GZipStream gzipIn = new GZipStream(new MemoryStream(ScoreDetails), CompressionMode.Decompress);
            MemoryStream scoreDetailsBson = MiscUtil.ReadFully(gzipIn);

            scoreDetailsBson.Seek(0, SeekOrigin.Begin);
            using BsonDataReader bsonReader = new BsonDataReader(scoreDetailsBson);

            DefaultContractResolver contractResolver = new DefaultContractResolver
            {
                NamingStrategy = new CamelCaseNamingStrategy(true, false)
            };
            JsonSerializer serializer = JsonSerializer.Create(new JsonSerializerSettings
            {
                ContractResolver = contractResolver
            });
            FMSScoreDetails details = serializer.Deserialize <FMSScoreDetails>(bsonReader);

            return(details);
        }