public async Task CannotAlwaysDetermineCorrectType()
        {
            SearchDocument doc = new SearchDocument
            {
                ["hotelId"]     = "1",
                ["hotelName"]   = "2015-02-11T12:58:00Z",
                ["location"]    = TestExtensions.CreateDynamicPoint(-73.975403, 40.760586),    // Test that we don't confuse Geo-JSON & complex types.
                ["geoLocation"] = TestExtensions.CreateDynamicGeoPoint(-73.975403, 40.760586), // Test that we don't confuse Geo-JSON & complex types.
                ["rooms"]       = new[]
                {
                    new SearchDocument
                    {
                        ["baseRate"] = double.NaN
                    }
                }
            };

            await VerifyRoundtrip(
                d => (string)d["hotelId"],
                doc,
                new SearchDocument
            {
                ["hotelId"]     = "1",
                ["hotelName"]   = new DateTimeOffset(2015, 2, 11, 12, 58, 0, TimeSpan.Zero),
                ["location"]    = TestExtensions.CreateDynamicPoint(-73.975403, 40.760586),
                ["geoLocation"] = TestExtensions.CreateDynamicGeoPoint(-73.975403, 40.760586),
                ["rooms"]       = new[]
                {
                    new SearchDocument
                    {
                        ["baseRate"] = "NaN"
                    }
                }
            },
                new GetDocumentOptions
            {
                SelectedFields = SelectPopulatedFields(doc)
            });
        }
 public async Task UnselectedFieldsNullStatic() =>
 await VerifyRoundtrip(
     h => h.HotelId,
     new Hotel()
 {
     HotelId            = "2",
     HotelName          = "Countryside Hotel",
     Description        = "Save up to 50% off traditional hotels.  Free WiFi, great location near downtown, full kitchen, washer & dryer, 24/7 support, bowling alley, fitness center and more.",
     DescriptionFr      = "Économisez jusqu'à 50% sur les hôtels traditionnels.  WiFi gratuit, très bien situé près du centre-ville, cuisine complète, laveuse & sécheuse, support 24/7, bowling, centre de fitness et plus encore.",
     Category           = "Budget",
     Tags               = new[] { "24-hour front desk service", "coffee in lobby", "restaurant" },
     ParkingIncluded    = false,
     SmokingAllowed     = true,
     LastRenovationDate = new DateTimeOffset(1999, 9, 6, 0, 0, 0, TimeSpan.Zero),           //aka.ms/sre-codescan/disable
     Rating             = 3,
     Location           = TestExtensions.CreatePoint(-78.940483, 35.904160),
     GeoLocation        = TestExtensions.CreateGeoPoint(-78.940483, 35.904160),
     Address            = new HotelAddress()
     {
         StreetAddress = "6910 Fayetteville Rd",
         City          = "Durham",
         StateProvince = "NC",
         Country       = "USA",
         PostalCode    = "27713"
     },
     Rooms = new[]
     {
         new HotelRoom()
         {
             Description    = "Suite, 1 King Bed (Amenities)",
             DescriptionFr  = "Suite, 1 très grand lit (Services)",
             Type           = "Suite",
             BaseRate       = 2.44,
             BedOptions     = "1 King Bed",
             SleepsCount    = 2,
             SmokingAllowed = true,
             Tags           = new[] { "coffee maker" }
         },
         new HotelRoom()
         {
             Description    = "Budget Room, 1 Queen Bed (Amenities)",
             DescriptionFr  = "Chambre Économique, 1 grand lit (Services)",
             Type           = "Budget Room",
             BaseRate       = 7.69,
             BedOptions     = "1 Queen Bed",
             SleepsCount    = 2,
             SmokingAllowed = false,
             Tags           = new[] { "coffee maker" }
         }
     }
 },
     new Hotel()
 {
     HotelName   = "Countryside Hotel",
     Description = "Save up to 50% off traditional hotels.  Free WiFi, great location near downtown, full kitchen, washer & dryer, 24/7 support, bowling alley, fitness center and more.",
     Address     = new HotelAddress()
     {
         City = "Durham"
     },
     Rooms = new[]
     {
         new HotelRoom()
         {
             BaseRate = 2.44
         },
         new HotelRoom()
         {
             BaseRate = 7.69
         }
     }
 },
     new GetDocumentOptions()
 {
     SelectedFields = new[] { "description", "hotelName", "address/city", "rooms/baseRate" }
 });