SORU
6 Temmuz 2010, Salı


XML String Nesnesine dönüştürmek

Bir soket üzerinden XML dizeleri alıyorum, ve C için bu dönüştürmek ister# nesneler.

İletiler genellikle

<msg>
   <id>1</id>
   <action>stop</action>
</msg>

Yeni duyuyorum .Net, ve tabii bunu yapmak için en iyi yöntem değilim. Önce Java için JAXB kullandım, ve eğer ona benzer bir şey varsa, ya da bu farklı bir şekilde ele alınacağından emin değildi.

CEVAP
27 EKİM 2013, Pazar


İki ihtimal var.

Yöntem 1.ANNOTATİONaracı

< / ^ hr . XML bu konumda C:\path\to\xml\file.xml dosyası olduğunu varsayalım

  1. AçınGeliştirici Komut İstemi
    Start Menu > Programs > Microsoft Visual Studio 2012 > Visual Studio Tools bulabilirsiniz Veya eğer Windows 8 sadece yazmaya başlayınGeliştirici Komut İstemiBaşlangıç ekranı
  2. XML için değişiklik konumu cd /D "C:\path\to\xml" yazarak dizin dosyası
  3. OluşturunDosya ANNOTATİONxml xsd file.xml yazarak dosyadan
  4. OluşturunC# derslerixsd /c file.xsd yazarak

Ve işte bu! C oluşturulan# C:\path\to\xml\file.cs xml dosyasından sınıfları

Yöntem 2 - Özel Yapıştır

< / ^ hr . Gerekli Visual Studio 2012 ile .Net Çerçeve >= 4.5 projenin hedef olarak

  1. Senin XML içeriği kopyala panoya bir dosya
  2. Çözüm için yeni Ekle, sınıf dosyası boş (ShiftAltC)
  3. Dosya ve 10 ** menüsünü açın
    enter image description here

Ve işte bu!

Kullanımı

< / ^ hr .

Kullanımı bu yardımcı sınıfı ile çok basittir:

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<T>(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<T>(this string @this) where T : class
        {
            return JSON.Deserialize<T>(@this.Trim());
        }
    }
}

Şimdi tüm yapmanız gereken, şudur:

    public class JSONRoot
    {
        public catalog catalog { get; set; }
    }
    // ...

    string xml = File.ReadAllText(@"D:\file.xml");
    var catalog1 = xml.ParseXML<catalog>();

    string json = File.ReadAllText(@"D:\file.json");
    var catalog2 = json.ParseJSON<JSONRoot>();

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • alex maybury

    alex maybury

    20 Aralık 2007
  • CNNMoney

    CNNMoney

    16 Kasım 2006
  • Migs351

    Migs351

    3 HAZİRAN 2007