Got it.. (BTW, I was referring to the JavascriptSerializer - perhaps
the XmlSerializer is smarter)..

You just have to mark the extra stuff with ScriptIgnore, such as this:

[ScriptIgnore]
public Type ReturnedType
{
   get { return typeof(Price); }
}

Everything is working awesome now!!!

Thanks all,
Mike

On Mon, Oct 12, 2009 at 5:17 PM, G. Richard Bellamy
<[email protected]> wrote:
> That doesn't sound right... I've serialized IUserType before. Let me try to
> find a sample...
>
> On Mon, Oct 12, 2009 at 5:15 PM, Mike Christensen <[email protected]>
> wrote:
>>
>> Hi -
>>
>> The IUserType approach almost works, however I need to mark my type as
>> [Serializable] which the implementation for IUserType does not allow
>> for..  You'll get a circular reference detected when serializing the
>> getters..
>>
>> Guess it's back to the drawing board..
>>
>> Mike
>>
>> On Mon, Oct 12, 2009 at 2:17 PM, Mike Christensen <[email protected]>
>> wrote:
>> > Hi - The URL you mentioned only seems to contain information about
>> > persisting enums as strings, which is great since I was wondering
>> > about that as well (as PostgreSQL users string for enums)..
>> >
>> > Can you point me to any relevant information about IUserType and how
>> > to create a user defined type that persists in the DB (as an integer,
>> > rather than serialized byte array)?  Thanks!
>> >
>> > Mike
>> >
>> > On Mon, Oct 12, 2009 at 1:23 PM, Mauricio Scheffer
>> > <[email protected]> wrote:
>> >>
>> >> First, consider using System.Decimal instead of your own Price class.
>> >> If you still need some special feature and absolutely need your own
>> >> Price class, write a NHibernate IUserType. Here are some sample user
>> >> types: http://nhforge.org/wikis/howtonh/tags/IUserType/default.aspx
>> >>
>> >> On Oct 12, 5:14 pm, Mike Christensen <[email protected]> wrote:
>> >>> Hi guys - I've been struggling with this one for a while, the scenario
>> >>> seems very basic but I've spent several hours on this and run into
>> >>> what seems like NHibernate bugs..
>> >>>
>> >>> Here's the situation.  I have a class called "Price" which is
>> >>> implemented like this:
>> >>>
>> >>>   [Serializable]
>> >>>   public class Price : IComparable, IFormattable, IComparable<int>,
>> >>> IEquatable<int>
>> >>>   {
>> >>>      public static implicit operator Price(int cents);
>> >>>      public static implicit operator int(Price price);
>> >>>      public static bool operator ==(Price x, Price y);
>> >>>      public static bool operator !=(Price x, Price y);
>> >>>      public int CompareTo(object obj);
>> >>>      public int CompareTo(int other);
>> >>>      public bool Equals(int other);
>> >>>    }
>> >>>
>> >>> As you can see, the compiler will treat Price exactly like an
>> >>> integer.  I can say:
>> >>>
>> >>> Price p = 500; //p is $5.00
>> >>>
>> >>> ...as well as compare a Price object to other Price objects or to
>> >>> ints.
>> >>>
>> >>> In ActiveRecord, I'd like to have this:
>> >>>
>> >>>      [Property(NotNull = true, ColumnType = "Int32")]
>> >>>      public Price VendorFees
>> >>>      {
>> >>>         get { return vendorfees; }
>> >>>         set { vendorfees = value; }
>> >>>      }
>> >>>
>> >>> This seems simple enough, and actually the above code works when you
>> >>> Create or Update a record, however it causes an exception when you
>> >>> load.  Under the covers, this appears to be an NHibernate bug.  When
>> >>> NHibernate hydrates an object, in ReflectionOptimizer.cs there's a
>> >>> function called GenerateSetPropertyValuesMethod.  This method actually
>> >>> builds IL code (pretty slick) which will loop through the value array
>> >>> from the database and set it to the appropriate setters on the
>> >>> object.  However, there's a bug in this code that assumes the DB type
>> >>> and the "setter" type are exactly the same.  The setter is never even
>> >>> called on my object, I just get an exception that says "Cannot cast
>> >>> Website.Price to System.Int32" (which happens when the IL code is
>> >>> invoked)..  So in my opinion, that's an NHibernate bug however I don't
>> >>> see them fixing this.
>> >>>
>> >>> The work-around I'm exploring is to get NHibernate to hydrate this
>> >>> column as a "Price" in the first place.  The method I'm trying to use
>> >>> would be to do something like this:
>> >>>
>> >>>      [Property(NotNull = true, ColumnType = "Website.Price,Website",
>> >>> SqlType = "integer")]
>> >>>      public Price VendorFees
>> >>>      {
>> >>>         get { return vendorfees; }
>> >>>         set { vendorfees = value; }
>> >>>      }
>> >>>
>> >>> I believe this would work, however, Active Record appears to configure
>> >>> this column as a serializable type and wants to map it to a byte array
>> >>> in the DB.  When AR is building the Insert command, I get an exception
>> >>> saying the parameter type was bytea but the data was an integer.
>> >>>
>> >>> Can anyone point me in the right direction?  I'm totally lost on this
>> >>> one.  Thanks!!
>> >>>
>> >>> Mike
>> >> >>
>> >>
>> >
>>
>>
>
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Castle Project Users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/castle-project-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to