Using asp.net profiles, I've stored a complex type (class) and retrieved it. But it is returning a new object that is not initialized instead of null? Is this the expected behavior, if so how can I determine if I've saved data for the given user?

should be some easy points for someone to pick up..
['https://Stackoverflow.com/questions/3169164', 'https://Stackoverflow.com', 'https://Stackoverflow.com/users/254428/']
Your question is a little unclear, but I think you're asking why there's a non-null profile data object for a user who you haven't stored data for yet?

[This article](http://msdn.microsoft.com/en-us/magazine/cc163724.aspx#S4) might hopefully clear it up for you. Some of the relevant bits:

> 
> A user profile is a collection of
>  values that the ASP.NET 2.0 runtime
>  groups as public fields of a
>  dynamically generated class. The class
>  is derived from a system-provided
>  class and is extended with the
>  addition of a few new members. The
>  class doesn't have to be marked as
>  Serializable, however its contents are
>  persisted to the storage medium as
>  individual properties. The storage
>  occurs on a per-user basis and is
>  preserved until an administrator
>  deletes it.
> 
> 
> 

And further down:

> 
> When the application runs and a page
>  is displayed, ASP.NET dynamically
>  creates a profile object that contains
>  properly typed data and assigns the
>  current settings for the logged user
>  to the properties defined in the data
>  model. The profile object is added to
>  the current HttpContext object and
>  made available to pages through the
>  Profile property. Assuming that the
>  profile model has been defined to
>  store a list of links as a collection,
>  the following code snippet shows how
>  to retrieve the list of favorite links
>  that are created by a given user: 
> 
> 
> ...
> 
> 
> This code assumes a Links property in
>  the profile object that references a
>  collection type. When the page is
>  loaded, Links and other properties are
>  initialized to contain the most
>  recently stored values; when the page
>  is unloaded their current contents are
>  stored to the persistent medium.
> 
> 
> 

If you need to track whether a user has ever set profile data before, you might be able to use the [FindProfilesByUserName](http://msdn.microsoft.com/en-us/library/system.web.profile.sqlprofileprovider.findprofilesbyusername.aspx) function to check to see if a profile exists before you log them in.
A little late, but [UsingDefaultValue](https://learn.microsoft.com/en-us/dotnet/api/system.configuration.settingspropertyvalue.usingdefaultvalue?view=dotnet-plat-ext-3.1) tells you if the property value is coming from the user profile settings or if it's using a default. Another way you can get, kind of, the same result is using [Deserialized](https://learn.microsoft.com/en-us/dotnet/api/system.configuration.settingspropertyvalue.deserialized?view=dotnet-plat-ext-3.1).