XML to C# Class Question

前端 未结 7 1286
走了就别回头了
走了就别回头了 2020-12-17 01:07

Can someone please help me, I have this xml snippet



  123         


        
7条回答
  •  北海茫月
    2020-12-17 01:30

    You have two possibilities.

    Method 1. XSD tool


    Suppose that you have your XML file in this location C:\path\to\xml\file.xml

    1. Open Developer Command Prompt
      You can find it in Start Menu > Programs > Microsoft Visual Studio 2012 > Visual Studio Tools Or if you have Windows 8 can just start typing Developer Command Prompt in Start screen
    2. Change location to your XML file directory by typing cd /D "C:\path\to\xml"
    3. Create XSD file from your xml file by typing xsd file.xml
    4. Create C# classes by typing xsd /c file.xsd

    And that's it! You have generated C# classes from xml file in C:\path\to\xml\file.cs

    Method 2 - Paste special


    Required Visual Studio 2012+

    1. Copy content of your XML file to clipboard
    2. Add to your solution new, empty class file (Shift+Alt+C)
    3. Open that file and in menu click Edit > Paste special > Paste XML As Classes
      enter image description here

    And that's it!

    Usage


    Usage is very simple with this helper class:

    using System;
    using System.IO;
    using System.Web.Script.Serialization; // Add reference: System.Web.Extensions
    using System.Xml;
    using System.Xml.Serialization;
    
    namespace Helpers
    {
        internal static class ParseHelpers
        {
            private static JavaScriptSerializer json;
            private static JavaScriptSerializer JSON { get { return json ?? (json = new JavaScriptSerializer()); } }
    
            public static Stream ToStream(this string @this)
            {
                var stream = new MemoryStream();
                var writer = new StreamWriter(stream);
                writer.Write(@this);
                writer.Flush();
                stream.Position = 0;
                return stream;
            }
    
    
            public static T ParseXML(this string @this) where T : class
            {
                var reader = XmlReader.Create(@this.Trim().ToStream(), new XmlReaderSettings() { ConformanceLevel = ConformanceLevel.Document });
                return new XmlSerializer(typeof(T)).Deserialize(reader) as T;
            }
    
            public static T ParseJSON(this string @this) where T : class
            {
                return JSON.Deserialize(@this.Trim());
            }
        }
    }
    

    All you have to do now, is:

        public class JSONRoot
        {
            public catalog catalog { get; set; }
        }
        // ...
    
        string xml = File.ReadAllText(@"D:\file.xml");
        var catalog1 = xml.ParseXML();
    
        string json = File.ReadAllText(@"D:\file.json");
        var catalog2 = json.ParseJSON();
    

    Here you have some Online XML <--> JSON Converters: Click

提交回复
热议问题