Probably tree-shaking is dropping your fields. When fields are only referenced by polymer expressions in your markup tree-shaking doesn't recognize the fields are needed, so it drops them.
I think you want to use @observable anyway because otherwise value changes are not reflected in your view.
class Weather
{
@observable String city; // or @reflectable String city;
@observable num temp; // or @reflectable num temp;
// The constructor just creates an instance by extracting the city, temp info fromthe JSON string
}