[FIXED] [V0.8.1] Store object serialization broken if ReaderID is set to GUID property

  1. #1

    [FIXED] [V0.8.1] Store object serialization broken if ReaderID is set to GUID property

    This was working before but is now broken with latest SVN update. I have a store with the readerID set to a GUID property (UserGUID). When I add a record to the grid, it auto sets the record value for that property to be same as the rowID. When I save the store, it tries to assign that rowID integer value to my object's GUID property, causing an error.

    Page Code

    <%@ Page Language="vb" AutoEventWireup="false" CodeBehind="ObjectGrid.aspx.vb" Inherits="CooliteSandbox.ObjectGrid" %>
    
    <%@ Register Assembly="Coolite.Ext.Web" Namespace="Coolite.Ext.Web" TagPrefix="ext" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <script runat="server">
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            If Not IsPostBack AndAlso Not Coolite.Ext.Web.Ext.IsAjaxRequest Then
                Me.store.DataSource = GetUsers()
                Me.store.DataBind()
            End If
        End Sub
    
        Private Sub store_BeforeStoreChanged(ByVal sender As Object, ByVal e As Coolite.Ext.Web.BeforeStoreChangedEventArgs) Handles store.BeforeStoreChanged
            Dim handler = New Coolite.Ext.Web.StoreDataHandler(e.DataHandler.JsonData)
            Dim changedData = handler.ObjectData(Of UserInfo)()
    
            For Each updatedObj In changedData.Updated
                'do something
            Next
    
            For Each deletedObj In changedData.Deleted
                'do something
            Next
    
            For Each newObj In changedData.Created
                'do something
            Next
        End Sub
    
        Protected Function GetUsers() As Generic.List(Of UserInfo)
            Dim list As New Generic.List(Of UserInfo)
            list.Add(New UserInfo("Jessica", "Alba"))
            list.Add(New UserInfo("Megan", "Fox"))
            Return list
        End Function
    
        Public Class UserInfo
            Private _UserGUID As Guid = Guid.NewGuid
            Public ReadOnly Property UserGUID() As Guid
                Get
                    Return _UserGUID
                End Get
            End Property
    
            Private _LastName As String = String.Empty
            Public Property LastName() As String
                Get
                    Return _LastName
                End Get
                Set(ByVal value As String)
                    _LastName = value
                End Set
            End Property
    
            Private _FirstName As String = String.Empty
            Public Property FirstName() As String
                Get
                    Return _FirstName
                End Get
                Set(ByVal value As String)
                    _FirstName = value
                End Set
            End Property
    
            Public Sub New(ByVal aFirstName As String, ByVal aLastName As String)
                Me._LastName = aLastName
                Me._FirstName = aFirstName
            End Sub
    
        End Class
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <ext:ScriptManager runat="server" IDMode="Static" Theme="Slate">
        </ext:ScriptManager>
        <ext:Store runat="server" ID="store" ShowWarningOnFailure="true">
            <Reader>
                <ext:JsonReader ReaderID="UserGUID">
                    <Fields>
                        <ext:RecordField Name="UserGUID"></ext:RecordField>
                        <ext:RecordField Name="LastName">
                        </ext:RecordField>
                        <ext:RecordField Name="FirstName">
                        </ext:RecordField>
                    </Fields>
                </ext:JsonReader>
            </Reader>
        </ext:Store>
        <div style="padding: 20px">
            <ext:GridPanel runat="server" ID="grid" Title="Users" Icon="UserFemale" StoreID="store"
                Height="500" Width="500" ClicksToEdit="1" Frame="true">
                <TopBar>
                    <ext:Toolbar runat="server">
                        <Items>
                            <ext:Button runat="server" ID="btnSave" Text="Save" Icon="Disk">
                                <Listeners>
                                    <Click Handler="#{store}.save();" />
                                </Listeners>
                            </ext:Button>
                        </Items>
                    </ext:Toolbar>
                </TopBar>
                <ColumnModel>
                    <Columns>
                        <ext:RowNumbererColumn Fixed="true">
                        </ext:RowNumbererColumn>
                        <ext:Column DataIndex="FirstName" Header="First Name" Hideable="false">
                            <Editor>
                                <ext:TextField ID="TextField1" runat="server">
                                </ext:TextField>
                            </Editor>
                        </ext:Column>
                        <ext:Column DataIndex="LastName" Header="Last Name" Hideable="false">
                            <Editor>
                                <ext:TextField runat="server">
                                </ext:TextField>
                            </Editor>
                        </ext:Column>
                    </Columns>
                </ColumnModel>
                <Buttons>
                    <ext:Button runat="server" ID="btnAdd" Text="Add" Icon="Add">
                        <Listeners>
                            <Click Handler="var rowIndex = #{grid}.addRecord(); #{grid}.getView().focusRow(rowIndex); #{grid}.startEditing(rowIndex, 0);" />
                        </Listeners>
                    </ext:Button>
                    <ext:Button runat="server" ID="btnDelete" Text="Delete" Icon="Delete">
                        <Listeners>
                            <Click Handler="if (#{grid}.hasSelection()) {#{grid}.deleteSelected();}" />
                        </Listeners>
                    </ext:Button>
                </Buttons>
                <View>
                    <ext:GridView ForceFit="true">
                    </ext:GridView>
                </View>
                <SelectionModel>
                    <ext:RowSelectionModel runat="server" MoveEditorOnEnter="true">
                    </ext:RowSelectionModel>
                </SelectionModel>
            </ext:GridPanel>
        
    
        </form>
    </body>
    </html>
    Error

    System.Exception: Could not cast or convert from System.Int64 to System.Guid. at
    Newtonsoft.Json.Utilities.ConvertUtils.EnsureTypeAssignable(Object value, Type
    initialType, Type targetType) at
    Newtonsoft.Json.Utilities.ConvertUtils.ConvertOrCast(Object initialValue,
    CultureInfo culture, Type targetType) at
    Newtonsoft.Json.JsonSerializer.EnsureType(Object value, Type targetType) at
    Newtonsoft.Json.JsonSerializer.CreateObject(JsonReader reader, Type objectType,
    Object existingValue, JsonConverter memberConverter) at
    Newtonsoft.Json.JsonSerializer.CreateObjectFromNonDefaultConstructor(Type
    objectType, JsonReader reader) at
    Newtonsoft.Json.JsonSerializer.CreateAndPopulateObject(JsonReader reader, Type
    objectType) at Newtonsoft.Json.JsonSerializer.CreateObject(JsonReader reader,
    Type objectType, Object existingValue, JsonConverter memberConverter) at
    Newtonsoft.Json.JsonSerializer.PopulateList(IList list, Type listItemType,
    JsonReader reader) at Newtonsoft.Json.JsonSerializer.CreateObject(JsonReader
    reader, Type objectType, Object existingValue, JsonConverter memberConverter) at
    Newtonsoft.Json.JsonSerializer.SetMappingValue(JsonMemberMapping memberMapping,
    JsonReader reader, Object target) at
    Newtonsoft.Json.JsonSerializer.SetObjectMember(JsonReader reader, Object target,
    Type targetType, String memberName) at
    Newtonsoft.Json.JsonSerializer.PopulateObject(Object newObject, JsonReader
    reader, Type objectType) at
    Newtonsoft.Json.JsonSerializer.CreateAndPopulateObject(JsonReader reader, Type
    objectType) at Newtonsoft.Json.JsonSerializer.CreateObject(JsonReader reader,
    Type objectType, Object existingValue, JsonConverter memberConverter) at
    Newtonsoft.Json.JsonSerializer.Deserialize(JsonReader reader, Type objectType)
    at Newtonsoft.Json.JsonSerializer.Deserialize(TextReader reader, Type
    objectType) at Coolite.Ext.Web.StoreDataHandler.ObjectData[T]() in C:\Program
    Files\Coolite\SVN\toolkit\Coolite.Ext.Web\Ext\Data\StoreDataHandler.cs:line 70
    at ASP.objectgrid_aspx.store_BeforeStoreChanged(Object sender,
    BeforeStoreChangedEventArgs e) in C:\Documents and Settings\jchau\My
    Documents\Visual Studio
    2008\Projects\CooliteSandbox\CooliteSandbox\ObjectGrid.aspx:line 16 at
    Coolite.Ext.Web.Store.OnBeforeStoreChanged(BeforeStoreChangedEventArgs e) in
    C:\Program Files\Coolite\SVN\toolkit\Coolite.Ext.Web\Ext\Data\Store.cs:line 413
    at Coolite.Ext.Web.Store.DoSaving(String jsonData, XmlNode callbackParameters)
    in C:\Program Files\Coolite\SVN\toolkit\Coolite.Ext.Web\Ext\Data\Store.cs:line
    586 at Coolite.Ext.Web.Store.RaiseAjaxPostBackEvent(String eventArgument) in
    C:\Program Files\Coolite\SVN\toolkit\Coolite.Ext.Web\Ext\Data\Store.cs:line 914
  2. #2

    RE: [FIXED] [V0.8.1] Store object serialization broken if ReaderID is set to GUID property

    Hi,

    Fixed. Now ID field for new records is not submitted. But if need submit temporary id for new records then you can set for Store
    SkipIdForNewRecords="false" (default value is true)


    Please note that if you use UseIdConfirmation then id field for new records will be sumitted always


    Hope this help

Similar Threads

  1. [CLOSED] How to add Guid[] property to the component?
    By pil0t in forum 1.x Legacy Premium Help
    Replies: 3
    Last Post: Apr 22, 2011, 2:23 PM
  2. ASP.NET serialization and Store
    By daneel in forum 1.x Help
    Replies: 2
    Last Post: Feb 02, 2010, 6:05 AM
  3. [CLOSED] [1.0] Store ReaderID property
    By methode in forum 1.x Legacy Premium Help
    Replies: 2
    Last Post: Nov 18, 2009, 1:23 PM
  4. [CLOSED] [1.0] Store wraps GUID value with quotes (serialization)
    By jchau in forum 1.x Legacy Premium Help
    Replies: 4
    Last Post: Oct 22, 2009, 5:45 PM
  5. GUID in Ext:Label.Text property...
    By shaun in forum 1.x Help
    Replies: 2
    Last Post: Jul 26, 2009, 8:14 PM

Posting Permissions