This .NET Power Tip makes me bang my head against the wall over and over again!
How many times have I watched developers write line after line of C# code to create a structure that matches the structure of an XML or JSON document in classes?
I can tell you, it was not just once or twice…
I know, there are plenty of online tools that can do that. However, starting the browser, googling, copy-pasting, and so on. It’s always a hassle, but not anymore!
It turns out that Visual Studio has two very interesting functions that I have never heard of before:
Edit –> Paste Special –> Paste JSON as Classes
and
Edit –> Paste Special –> Paste XML as Classes
Well, they deliver exactly what they promise. Take the following JSON Document for example:
{"menu": {
"id": "file",
"value": "File",
"popup": {
"menuitem": [
{"value": "New", "onclick": "CreateNewDoc()"},
{"value": "Open", "onclick": "OpenDoc()"},
{"value": "Close", "onclick": "CloseDoc()"}
]
}
}}
Running “Paste JSON as Classes” gives you this:
public class Rootobject { public Menu menu { get; set; } } public class Menu { public string id { get; set; } public string value { get; set; } public Popup popup { get; set; } } public class Popup { public Menuitem[] menuitem { get; set; } } public class Menuitem { public string value { get; set; } public string onclick { get; set; } }
Yup, this is amazing!
Let’s take an XML example, as well:
<menu>
<header>Adobe SVG Viewer</header>
<item action="Open" id="Open">Open</item>
<item action="OpenNew" id="OpenNew">Open New</item>
<separator/>
<item action="ZoomIn" id="ZoomIn">Zoom In</item>
</menu>
gives you:
/// <remarks/> [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] [System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)] public partial class menu { private object[] itemsField; /// <remarks/> [System.Xml.Serialization.XmlElementAttribute("header", typeof(string))] [System.Xml.Serialization.XmlElementAttribute("item", typeof(menuItem))] [System.Xml.Serialization.XmlElementAttribute("separator", typeof(object))] public object[] Items { get { return this.itemsField; } set { this.itemsField = value; } } } /// <remarks/> [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] public partial class menuItem { private string actionField; private string idField; private string valueField; /// <remarks/> [System.Xml.Serialization.XmlAttributeAttribute()] public string action { get { return this.actionField; } set { this.actionField = value; } } /// <remarks/> [System.Xml.Serialization.XmlAttributeAttribute()] public string id { get { return this.idField; } set { this.idField = value; } } /// <remarks/> [System.Xml.Serialization.XmlTextAttribute()] public string Value { get { return this.valueField; } set { this.valueField = value; } } }
*bangingmyheadagainstthewall*