Jun 11, 2009, 6:21 PM
[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 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>
ErrorSystem.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