Click here to Skip to main content
15,892,674 members
Articles / Desktop Programming / XAML
Tip/Trick

XamlServices class in .Net 4.0

Rate me:
Please Sign up or sign in to vote.
0.00/5 (No votes)
28 Apr 2011CPOL1 min read 19.6K   5   4
Serializing and deserializing objects with XamlServices class
XAML has up to now played a big role in WPF and Silverlight and is seen as a markup language to design GUIs. That is not quite true. XAML describes objects, their properties and their relations. It is not limited to designing user interfaces. That is why XAML has been separated from WPF and Silverlight in .NET framework 4.0.

Let's assume you have a class BigSerializableObject and want to save it to a file with all properties and attached objects. Later, you want to be able to load it again from the file and get a new instance which is a perfect copy of the object you originally serialized. You might do this with XML. Serializing is not much of a problem. Deserializing is a completely different story. You would have to navigate through the XML nodes, create instances of the required objects, fill them with the proper values and assemble them according to the structure of the XML. That also means writing lots of code.

Things get far easier when using the System.Xaml.XamlServices class. Serializing the object is very similar to what you might be used to from XML:

C#
using (TextWriter XamlWriter = File.CreateText("Test.xaml"))
{
  System.Xaml.XamlServices.Save(XamlWriter , MyBigSerializableObject);
}


That's it. Your object has just been serialized to XAML into the file Test.xaml. The only condition is that your object and all objects attached to it must be serializable.

Now we want to load our object again from the file Test.xaml. If possible, we want it as an object instance, just like it was before. And we don't want to write any code which constructs the object from the file. Try this:

C#
using (TextReader XamlReader = File.OpenText("Test.xaml"))
{
  BigSerializableObject MyNewBigSerializableObject = (BigSerializableObject)System.Xaml.XamlServices.Load(XamlReader);
}


Again, that was it. You now have a new instance of your original object, loaded from the file.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



Comments and Discussions

 
GeneralThe graph structure is not preserved - sibling nodes are sor... Pin
WindowsPhone25-Oct-11 17:57
WindowsPhone25-Oct-11 17:57 
GeneralNB: For WPF content, you should use XamlReader instead of Xa... Pin
Richard Deeming4-May-11 8:55
mveRichard Deeming4-May-11 8:55 
GeneralNeed it for siverlight Pin
ELhajjNet9-May-11 3:06
ELhajjNet9-May-11 3:06 
GeneralRe: Need it for siverlight Pin
CDP18029-May-11 3:19
CDP18029-May-11 3:19 
That depends on what you need them for. I found this in the MSDN, just as somebody already pointed out above:

Important

XamlServices is not the recommended XAML reading or XAML writing API set if you are processing WPF-defined types, or types based on WPF. For WPF usage, use System.Windows.Markup.XamlReader for reading or loading XAML (or BAML); and System.Windows.Markup.XamlWriter for writing back XAML. These classes use .NET Framework XAML Services APIs and the XAML readers and XAML writers internally in their implementation; however, they also provide support and specialized XAML schema context for WPF-specific concepts, such as optimizations for dependency properties and WPF known types.


Unfortunately, the MSDN did not mention this class to be available for Silverlight, so it appears like serializing objects with this class is not supported right now.
"I just exchanged opinions with my boss. I went in with mine and came out with his." - me, 2011
---
I am endeavoring, Madam, to construct a mnemonic memory circuit using stone knives and bearskins - Mr. Spock 1935 and me 2011



General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.