PDA

View Full Version : سوال: چطور میشه یک Entity رو [Serializable] کرد در LINQ TO SQL



mohammad.sakhidel
یک شنبه 08 اسفند 1389, 12:33 عصر
سلام دوستان

من یه لیست بصورت IEnumerable<Entity> دارم که میخوام در ViewState نگهش دارم ولی باید قبلش این Entity رو Serializableش کنم ولی نمیدونم چجوری؟



-----------------------------------------------------------------
بازار مرزی ایرانیان :: تجربه یک خرید ارزان و با کیفیت (http://www.bazaremarzi.com)

mohammad.sakhidel
چهارشنبه 11 اسفند 1389, 16:56 عصر
من این مشکلو با به کاربردن یه روش دیگه حل کردم ولی آیا تو این سایت کسی نیست که جواب این جور پرسش های بی پاسخ رو بده؟ به نظر میرسه سایت تبدیل شده به محیطی که فقط بشه توش مشکلی مثل این که " یه تگ <div> رو چطور در قسمتی خاص قرار داد؟ یا چطور میشه رنگ پس زمینه رو تغییر داد؟ " رو حلش کرد.



-----------------------------------------------------------------
بازار مرزی ایرانیان :: تجربه یک خرید ارزان و با کیفیت (http://www.bazaremarzi.com)

hlikehamed
چهارشنبه 11 اسفند 1389, 20:07 عصر
من این مشکلو با به کاربردن یه روش دیگه حل کردم ولی آیا تو این سایت کسی نیست که جواب این جور پرسش های بی پاسخ رو بده؟ به نظر میرسه سایت تبدیل شده به محیطی که فقط بشه توش مشکلی مثل این که " یه تگ <div> رو چطور در قسمتی خاص قرار داد؟ یا چطور میشه رنگ پس زمینه رو تغییر داد؟ " رو حلش کرد.

تایید. مدتی هست که سایت پاسخگوی سوالات نیست.
من خودم چندتا سوال گذاشتم که حتی یک پاسخ هم نداشته . یا سوالهای من زیادی حرفه ایه که بعید میدونم! و یا افراد علاقه ای برای اشتراک گذاشتن تجربه هاشون ندارند.و یا...
بیشتر مواقع خودم مشکلات رو حل میکنم.

Himalaya
پنج شنبه 12 اسفند 1389, 02:10 صبح
<asp:Label ID="lblMessage" runat="server" Text=""></asp:Label>
<br />
<asp:Button ID="BtnSerialize" runat="server" Text="Serialize List of MyClass and Save it, in viewState"
OnClick="BtnSerialize_Click" />
<asp:Button ID="BtnDeserialize" runat="server" Text="Deserialize ViewState and show in grid"
OnClick="BtnDeserialize_Click" />
<br />
<br />
<asp:GridView ID="GridView1" runat="server">
</asp:GridView>


روش اول . استفاده از کلاس JavaScriptSerializer


using System.Web.Script.Serialization;
...
protected void BtnSerialize_Click(object sender, EventArgs e)
{
List<MyClass> myTable = new List<MyClass>()
{
new MyClass() { ID = 1, Name = "Amir", Family = "Ajorlo" },
new MyClass() { ID = 2, Name = "Ali", Family = "Sohrabi" },
new MyClass() { ID = 3, Name = "Hesam", Family = "Naderi" }
};

IEnumerable<MyClass> query = from row in myTable
where row.ID <= 2
select row;

JavaScriptSerializer serializer = new JavaScriptSerializer();
string serialize = serializer.Serialize(query);
ViewState["serialize"] = serialize;
lblMessage.Text = "Serialize Value is: " + serialize;
}

protected void BtnDeserialize_Click(object sender, EventArgs e)
{
if (ViewState["serialize"] != null)
{
JavaScriptSerializer deserializer = new JavaScriptSerializer();
List<MyClass> myTable = deserializer.Deserialize<List<MyClass>>((string)ViewState["serialize"]);
GridView1.DataSource = myTable;
GridView1.DataBind();
}
else
{
lblMessage.Text = "Please First click the BtnSerialize";
}
}

public class MyClass
{
public int ID { get; set; }
public string Name { get; set; }
public string Family { get; set; }
}



روش دوم . استفاده از کلاس ObjectStateFormatter . تو این حالت SerializableَAttribute باید قبل از کلاس قرار بگیره [Serializable]



protected void BtnSerialize_Click(object sender, EventArgs e)
{
List<MyClass> myTable = new List<MyClass>()
{
new MyClass() { ID = 1, Name = "Amir", Family = "Ajorlo" },
new MyClass() { ID = 2, Name = "Ali", Family = "Sohrabi" },
new MyClass() { ID = 3, Name = "Hesam", Family = "Naderi" }
};

IEnumerable<MyClass> query = from row in myTable
where row.ID <= 2
select row;

ObjectStateFormatter serializer = new ObjectStateFormatter();
string serialize = serializer.Serialize(query.ToList<MyClass>());
ViewState["serialize"] = serialize;
lblMessage.Text = "Serialize Value is: " + serialize;
}

protected void BtnDeserialize_Click(object sender, EventArgs e)
{
if (ViewState["serialize"] != null)
{
ObjectStateFormatter deserializer = new ObjectStateFormatter();
List<MyClass> myTable = (List<MyClass>)deserializer.Deserialize((string)ViewState["serialize"]);
GridView1.DataSource = myTable;
GridView1.DataBind();
}
else
{
lblMessage.Text = "Please First click the BtnSerialize";
}
}
}

[Serializable]
public class MyClass
{
public int ID { get; set; }
public string Name { get; set; }
public string Family { get; set; }
}