Learning .NET MAUI Part 2

As noted in part 0, I assume you are a Xamarin.Forms/C# programmer, familiar with Visual Studio. This series is not about converting your existing Xamarin.Forms apps; rather it is about converting your brain to MAUI. Since I’m learning as I’m going, your mileage may vary.

Community Toolkit

One of the tools you’ll absolutely want is the .NET Community Toolkit. It is available as an open-source project on GitHub. There are all sorts of goodies in there and you may want to take the time, at least, to read the Read.me file.

Global Usings

C# now offers Global Usings — that is, you mark the using statement once, and it is implicitly available on all your files. To do so create a new file (I called mine GlobalUsings.cs). If you used a class, delete everything in it except the using statements. Next, put the word global before each using (intellicode will help).

global using System;
global using System.Collections.Generic;
global using System.Linq;
global using System.Text;
global using System.Threading.Tasks;

You will not have to enter these using statements in any other file.

First look at ZipWise

We want to talk to a web service and there are a number of free ones to choose from. For this set of blog posts I’ll use ZipWise.

To get started, get yourself an account and an API key. There are a number of endpoints to choose from, and we will eventually build out our app to offer each choice. For now, let’s look at using the zipInfo api.

We’ll be working in json so we’ll use this call:

https://www.zipwise.com/webservices/zipinfo.php?key=YOUR_API_KEY&zip=-1720&format=json

Let’s get some JSON from ZipWise for a city. To do so, go to the ZipWise site, click on [Docs] for Zipinfo, which will bring you to an interactive page where you can put in your zip code and your key. Copy the sample and adjust accordingly.

https://www.zipwise.com/webservices/zipinfo.php?key=YOURKEY&zip=01720&format=json

When I put in my zip code, I get back:

{"results":{"zip":"01720","cities":[{"city":"Acton","preferred":"P"},{"city":"W Acton","preferred":"N"},{"city":"West Acton","preferred":"N"}],"county":"Middlesex","state":"MA","country":"U","area_code":"978","fips":"25017","time_zone":"EST","daylight_savings":"Y","latitude":"42.4836","longitude":"-71.4418","type":"S","population":"22791"}}
Using Json Pretty Print I can get a more readable version:

{
  "results": {
    "zip": "01720",
    "cities": [
      {
        "city": "Acton",
        "preferred": "P"
      },
      {
        "city": "W Acton",
        "preferred": "N"
      },
      {
        "city": "West Acton",
        "preferred": "N"
      }
    ],
    "county": "Middlesex",
    "state": "MA",
    "country": "U",
    "area_code": "978",
    "fips": "25017",
    "time_zone": "EST",
    "daylight_savings": "Y",
    "latitude": "42.4836",
    "longitude": "-71.4418",
    "type": "S",
    "population": "22791"
  }
}

Now we turn to json2csharp to emit classes for our JSON

public class City
    {
        public string city { get; set; }
        public string preferred { get; set; }
    }

    public class Results
    {
        public string zip { get; set; }
        public List<City> cities { get; set; }
        public string county { get; set; }
        public string state { get; set; }
        public string country { get; set; }
        public string area_code { get; set; }
        public string fips { get; set; }
        public string time_zone { get; set; }
        public string daylight_savings { get; set; }
        public string latitude { get; set; }
        public string longitude { get; set; }
        public string type { get; set; }
        public string population { get; set; }
    }

    public class Root
    {
        public Results results { get; set; }
    }

We'll work with these classes in the next post

About Jesse Liberty

Jesse Liberty has three decades of experience writing and delivering software projects and is the author of 2 dozen books and a couple dozen online courses. His latest book, Building APIs with .NET will be released early in 2025. Liberty is a Senior SW Engineer for CNH and he was a Senior Technical Evangelist for Microsoft, a Distinguished Software Engineer for AT&T, a VP for Information Services for Citibank and a Software Architect for PBS. He is a Microsoft MVP.
This entry was posted in Essentials and tagged , . Bookmark the permalink.