XML belgesinin serisini kaldırma


472

Bu XML belgesinin serisini nasıl kaldırabilirim:

<?xml version="1.0" encoding="utf-8"?>
<Cars>
  <Car>
    <StockNumber>1020</StockNumber>
    <Make>Nissan</Make>
    <Model>Sentra</Model>
  </Car>
  <Car>
    <StockNumber>1010</StockNumber>
    <Make>Toyota</Make>
    <Model>Corolla</Model>
  </Car>
  <Car>
    <StockNumber>1111</StockNumber>
    <Make>Honda</Make>
    <Model>Accord</Model>
  </Car>
</Cars>

Bu bende var:

[Serializable()]
public class Car
{
    [System.Xml.Serialization.XmlElementAttribute("StockNumber")]
    public string StockNumber{ get; set; }

    [System.Xml.Serialization.XmlElementAttribute("Make")]
    public string Make{ get; set; }

    [System.Xml.Serialization.XmlElementAttribute("Model")]
    public string Model{ get; set; }
}

.

[System.Xml.Serialization.XmlRootAttribute("Cars", Namespace = "", IsNullable = false)]
public class Cars
{
    [XmlArrayItem(typeof(Car))]
    public Car[] Car { get; set; }

}

.

public class CarSerializer
{
    public Cars Deserialize()
    {
        Cars[] cars = null;
        string path = HttpContext.Current.ApplicationInstance.Server.MapPath("~/App_Data/") + "cars.xml";

        XmlSerializer serializer = new XmlSerializer(typeof(Cars[]));

        StreamReader reader = new StreamReader(path);
        reader.ReadToEnd();
        cars = (Cars[])serializer.Deserialize(reader);
        reader.Close();

        return cars;
    }
}

işe yaramaz gibi görünüyor :-(


Sanırım örnek belgenizdeki köşeli parantezlerden kaçmanız gerekiyor.
harpo

4
Bu cevap gerçekten çok iyi: stackoverflow.com/a/19613934/196210
Revious

Yanıtlar:


359

İşte çalışan bir sürüm. Değiştim XmlElementAttributeetiket XmlElementxml StockNumber, Alma, Model değerleri unsurlardır çünkü niteliklerini değil. Ayrıca kaldırdım reader.ReadToEnd();(bu işlev tüm akışı okur ve bir dize döndürür, böylece Deserialize()işlev artık okuyucu kullanamazdı ... konum akışın sonundaydı). Ayrıca adlandırma ile birkaç özgürlük aldım :).

İşte sınıflar:

[Serializable()]
public class Car
{
    [System.Xml.Serialization.XmlElement("StockNumber")]
    public string StockNumber { get; set; }

    [System.Xml.Serialization.XmlElement("Make")]
    public string Make { get; set; }

    [System.Xml.Serialization.XmlElement("Model")]
    public string Model { get; set; }
}


[Serializable()]
[System.Xml.Serialization.XmlRoot("CarCollection")]
public class CarCollection
{
    [XmlArray("Cars")]
    [XmlArrayItem("Car", typeof(Car))]
    public Car[] Car { get; set; }
}

Deserialize işlevi:

CarCollection cars = null;
string path = "cars.xml";

XmlSerializer serializer = new XmlSerializer(typeof(CarCollection));

StreamReader reader = new StreamReader(path);
cars = (CarCollection)serializer.Deserialize(reader);
reader.Close();

Ve hafifçe düzeltilmiş xml (<Cars> 'ı sarmak için yeni bir öğe eklemem gerekiyordu ... Net dizilerin serileştirilmesi konusunda seçici):

<?xml version="1.0" encoding="utf-8"?>
<CarCollection>
<Cars>
  <Car>
    <StockNumber>1020</StockNumber>
    <Make>Nissan</Make>
    <Model>Sentra</Model>
  </Car>
  <Car>
    <StockNumber>1010</StockNumber>
    <Make>Toyota</Make>
    <Model>Corolla</Model>
  </Car>
  <Car>
    <StockNumber>1111</StockNumber>
    <Make>Honda</Make>
    <Model>Accord</Model>
  </Car>
</Cars>
</CarCollection>

68
Kullanılıyorsa [Serializable]gereksizdir XmlSerializer; XmlSerializerbunu asla kontrol etmez. Benzer şekilde, [Xml...]özniteliklerin çoğu, varsayılan davranışı taklit ettiği için gereksizdir; yani, varsayılan StockNumberolarak çağrılan bir özellik adlı bir öğe olarak saklanır <StockNumber>- bunun için özniteliklere gerek yoktur.
Marc Gravell

3
XmlElementAttribute = XmlElement ("Öznitelik" sonekini atlayabileceğiniz bir dil özelliğidir) Burada gerçek çözüm ReadToEnd () çağrısının kaldırılması ve bir kök düğümün eklenmesidir. Ama soruyu çözen erymski kodunu daha iyi kullanın (verilen
xml'i

2
Teşekkürler Kevin, Ama CarsCollection'ı örnek XML'den kaldırırsam. Carscollection'ı sınıflardan çıkardım ve kodu Deserealize ettim, ancak başarılı olamadım.
Vikrant

441

Sadece xml dosyasını bir dosyaya kaydetmeye ve C # sınıfları oluşturmak için xsd kullanmaya ne dersiniz ?

  1. Dosyayı diske yazın (Foo.xml olarak adlandırdım)
  2. Xsd'yi oluşturun: xsd foo.xml
  3. C # oluşturun: xsd foo.xsd /classes

Verileri şu şekilde okuyabilmesi gereken Et voila - ve C # kod dosyası XmlSerializer:

    XmlSerializer ser = new XmlSerializer(typeof(Cars));
    Cars cars;
    using (XmlReader reader = XmlReader.Create(path))
    {
        cars = (Cars) ser.Deserialize(reader);
    }

(oluşturulan foo.cs dosyasını projeye dahil edin)


6
Adamsın! Teşekkürler. ihtiyacı olan herkes için "yol" şöyle bir web yanıtından oluşturduğunuz bir Akış olabilir: var resp = response.Content.ReadAsByteArrayAsync (); var stream = yeni MemoryStream (sırasıyla Sonuç);
Induster

1
Harika bir fikir, ancak iç içe dizilerin yığınlarıyla biraz daha karmaşık modelim için işe yaramadı. İç içe diziler için tür dönüştürme hataları almaya devam etti - artı oluşturulan adlandırma düzeni istenen bir şey bıraktı. Bu yüzden özel yola çıktım.
GotDibbs

9
Nasıl olsun Xsd.exe
jwillmer

2
xsd.exe, windows komut isteminden değil, visual studio komut isteminden edinilebilir. Komut istemini Araçlar altındaki görsel stüdyoda açıp açamayacağınızı görün. Değilse, visual studio klasöründen erişmeyi deneyin. VS 2012 için burada bulundu: C: \ Program Files (x86) \ Microsoft Visual Studio 12.0 \ Common7 \ Tools \ Shortcuts. Windows 8'de "Visual Studio Araçları" nı aramayı deneyin.
goku_da_master

2
XSD'yi arayan herkes için. İşte bir SO iş parçacığı: stackoverflow.com/questions/22975031/…
SOReader

229

İki ihtimaliniz var.

Yöntem 1. XSD aracı


XML dosyanızın bu konumda olduğunu varsayalım C:\path\to\xml\file.xml

  1. Açık Geliştirici Komut İstemi
    İçeri bulabilirsiniz Start Menu > Programs > Microsoft Visual Studio 2012 > Visual Studio Tools sadece yazmaya başlayabilirsiniz Windows 8 varsa Or Geliştirici Komut İstemi içinde Başlat ekranından
  2. XML dosya dizininizin konumunu yazarak değiştirin cd /D "C:\path\to\xml"
  3. Yazarak xml dosyanızdan XSD dosyası oluşturunxsd file.xml
  4. Yazarak C # sınıfları oluşturmaxsd /c file.xsd

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

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


Gerekli Visual Studio 2012+

  1. XML dosyanızın içeriğini panoya kopyala
  2. Çözümünüze yeni, boş bir sınıf dosyası ekleyin ( Shift+ Alt+ C)
  3. Bu dosyayı açın ve menüde Edit > Paste special > Paste XML As Classes
    resim açıklamasını buraya girin

Ve bu kadar!

kullanım


Bu yardımcı sınıfla kullanımı çok basit:

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 tek yapmanız gereken:

    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>();

16
+1 iyi cevap. Ancak, Paste XML As Classeskomut yalnızca .NET
4.5'i hedefliyor

1
Bu, vs2012 + yüklü ise modeli oluşturmak için harika bir yoldur. Daha sonra otomatik özellikleri kullanmak için ReSharper kod temizleme çalıştırdım ve sonra da bazı toplama yaptı. Bu yöntemle oluşturabilir ve gerekirse eski bir projeye kopyalayabilirsiniz.
Scotty.NET

4
.Net4.5 hedeflemesi sorun değil. Dotnet4.5 ile geçici bir projeyi başlatın, oraya kopyalayıp yapıştırın ve kaynağı gerçek projenize kopyalayın.
LosManos

2
"katalog" nesnesi veya sınıfı nerede?
CB4

3
VS 2017 Topluluğu'ndaki menüde "XML'i sınıflar olarak yapıştır" ın görünmesi için "ASP.NET ve web geliştirme" yi yüklemiş olmanız gerekir. Eksikse, kurulumunuzu değiştirmek için VS yükleyiciyi tekrar çalıştırın.
Slion

89

Aşağıdaki snippet hile yapmalıdır (ve serileştirme özelliklerinin çoğunu yok sayabilirsiniz):

public class Car
{
  public string StockNumber { get; set; }
  public string Make { get; set; }
  public string Model { get; set; }
}

[XmlRootAttribute("Cars")]
public class CarCollection
{
  [XmlElement("Car")]
  public Car[] Cars { get; set; }
}

...

using (TextReader reader = new StreamReader(path))
{
  XmlSerializer serializer = new XmlSerializer(typeof(CarCollection));
  return (CarCollection) serializer.Deserialize(reader);
}

14
Aslında tek cevap bu. Kabul edilen cevapta yeni başlayanların kafasını karıştırabilecek birkaç kusur var.
Alev ateşi

24

Bunun yardımcı olup olmadığına bakın:

[Serializable()]
[System.Xml.Serialization.XmlRootAttribute("Cars", Namespace = "", IsNullable = false)]
public class Cars
{
    [XmlArrayItem(typeof(Car))]
    public Car[] Car { get; set; }
}

.

[Serializable()]
public class Car
{
    [System.Xml.Serialization.XmlElement()]
    public string StockNumber{ get; set; }

    [System.Xml.Serialization.XmlElement()]
    public string Make{ get; set; }

    [System.Xml.Serialization.XmlElement()]
    public string Model{ get; set; }
}

Ve bu xml dosyasına dayalı bir şema belgesi oluşturmak için visual studio ile birlikte gelen xsd.exe programını kullanma ve sonra yeniden şema belgesine dayalı bir sınıf oluşturmak için kullanın.


9

.Net 'dizileri serileştirme konusunda seçici' düşünmüyorum. İlk xml belgesi iyi biçimlendirilmemiş. Kök öğesi yok, ancak varmış gibi görünüyor. Standart xml belgesinin bir kökü ve en az 1 öğesi vardır (eğer varsa). Örneğinizde:

<Root> <-- well, the root
  <Cars> <-- an element (not a root), it being an array
    <Car> <-- an element, it being an array item
    ...
    </Car>
  </Cars>
</Root>

7

.xml dosyanız diskte bir yerde oluşturulmuşsa ve kullandıysanız bu kod bloğunu deneyin List<T>:

//deserialization

XmlSerializer xmlser = new XmlSerializer(typeof(List<Item>));
StreamReader srdr = new StreamReader(@"C:\serialize.xml");
List<Item> p = (List<Item>)xmlser.Deserialize(srdr);
srdr.Close();`

Not: C:\serialize.xml.xml dosyamın yolu. İhtiyaçlarınız için değiştirebilirsiniz.


6

Kevin'in anser'ı, gerçek dünyada, orijinal XML'yi genellikle ihtiyaçlarınıza uyacak şekilde değiştiremediğiniz gerçeğinin yanı sıra iyidir.

Orijinal XML için de basit bir çözüm var:

[XmlRoot("Cars")]
public class XmlData
{
    [XmlElement("Car")]
    public List<Car> Cars{ get; set; }
}

public class Car
{
    public string StockNumber { get; set; }
    public string Make { get; set; }
    public string Model { get; set; }
}

Ve sonra sadece şunu arayabilirsiniz:

var ser = new XmlSerializer(typeof(XmlData));
XmlData data = (XmlData)ser.Deserialize(XmlReader.Create(PathToCarsXml));

Teşekkürler! Gigabyte değerinde günlük dosyalarını değiştirmek istemediğim için cevabınız tam olarak ihtiyacım olan şeydi.
Colin

Her ne kadar XmlSerializer çözümünün çok zarif olduğunu ancak kuşkusuz çok hızlı olmadığını ve beklenmedik Xml verilerine hassas bir şekilde tepki verdiğini belirtmek gerekir. Bu nedenle, sorununuz tam bir serileştirme gerektirmiyorsa, yalnızca daha pragmatik ve performanslı XmlReader sınıfını kullanmayı ve <Car> öğeleri arasında dolaşmayı düşünmelisiniz.
Kim Homann

5

Bu Genel Sınıf için Xml Serileştirme ve Serisini Kaldırma'yı deneyin.

public class SerializeConfig<T> where T : class
{
    public static void Serialize(string path, T type)
    {
        var serializer = new XmlSerializer(type.GetType());
        using (var writer = new FileStream(path, FileMode.Create))
        {
            serializer.Serialize(writer, type);
        }
    }

    public static T DeSerialize(string path)
    {
        T type;
        var serializer = new XmlSerializer(typeof(T));
        using (var reader = XmlReader.Create(path))
        {
            type = serializer.Deserialize(reader) as T;
        }
        return type;
    }
}

4

Yeni başlayanlar için

Burada cevapların çok yardımcı olduğunu gördüm, bu hala bu işi yapmak için (sadece biraz) mücadele ettiğimi söyledi. Yani, birine yardımcı olması durumunda, çalışma çözümünü heceleyeceğim:

Orijinal Sorudan XML. Xml Class1.xml pathdosyasındadır, kodda bu xml dosyasını bulmak için bu dosyaya bir kullanılır.

Bu çalışmayı elde etmek için @erymski'nin yanıtını kullandım, bu yüzden Car.cs adlı bir dosya oluşturdum ve aşağıdakileri ekledim:

using System.Xml.Serialization;  // Added

public class Car
{
    public string StockNumber { get; set; }
    public string Make { get; set; }
    public string Model { get; set; }
}

[XmlRootAttribute("Cars")]
public class CarCollection
{
    [XmlElement("Car")]
    public Car[] Cars { get; set; }
}

@Erymski tarafından sağlanan diğer kod kısmı ...

using (TextReader reader = new StreamReader(path))
{
  XmlSerializer serializer = new XmlSerializer(typeof(CarCollection));
  return (CarCollection) serializer.Deserialize(reader);
}

... ana programınıza (Program.cs) gider, static CarCollection XCar()şöyle:

using System;
using System.IO;
using System.Xml.Serialization;

namespace ConsoleApp2
{
    class Program
    {

        public static void Main()
        {
            var c = new CarCollection();

            c = XCar();

            foreach (var k in c.Cars)
            {
                Console.WriteLine(k.Make + " " + k.Model + " " + k.StockNumber);
            }
            c = null;
            Console.ReadLine();

        }
        static CarCollection XCar()
        {
            using (TextReader reader = new StreamReader(@"C:\Users\SlowLearner\source\repos\ConsoleApp2\ConsoleApp2\Class1.xml"))
            {
                XmlSerializer serializer = new XmlSerializer(typeof(CarCollection));
                return (CarCollection)serializer.Deserialize(reader);
            }
        }
    }
}

Umarım yardımcı olur :-)


1
Benim için çalıştı. Bu, verilen xml girişi (OP örneğinde olduğu gibi) için de mükemmel çalışan bir çözümdür. [XmlElement ("Car")] doğru özelliktir. Diğer örneklerde, herkese açık Car [] Cars {get; Ayarlamak; } ve doğru şekilde serisini kaldıracaktır. Teşekkürler.
Diwakar Padmaraja

3

Bir XML belgesinin serisini kaldırmak için genel bir sınıfa ne dersiniz

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Generic class to load any xml into a class
// used like this ...
// YourClassTypeHere InfoList = LoadXMLFileIntoClass<YourClassTypeHere>(xmlFile);

using System.IO;
using System.Xml.Serialization;

public static T LoadXMLFileIntoClass<T>(string xmlFile)
{
    T returnThis;
    XmlSerializer serializer = new XmlSerializer(typeof(T));
    if (!FileAndIO.FileExists(xmlFile))
    {
        Console.WriteLine("FileDoesNotExistError {0}", xmlFile);
    }
    returnThis = (T)serializer.Deserialize(new StreamReader(xmlFile));
    return (T)returnThis;
}

Bu kısım gerekli olabilir veya olmayabilir. XML belgesini Visual Studio'da açın, XML'ye sağ tıklayın, özellikleri seçin. Ardından şema dosyanızı seçin.


1
Bu, iş mantığı kodunu biraz küçültmemi ve oluşturduğum tüm <T> sınıflarıyla yardımcı bir sınıftaki işlevselliği merkezileştirmemi sağladı. Zaten bir dize XML vardı, bu yüzden bu yoğunlaştırabilir: `genel statik T LoadXMLFileIntoClass <T> (dize xmlData)` {`XmlSerializer serializer = yeni XmlSerializer (typeof (T)); `return (T) serializer.Deserialize (yeni StringReader (xmlData)); `} Teşekkürler!
pwrgreg007

3

Bir astar:

var object = (Cars)new XmlSerializer(typeof(Cars)).Deserialize(new StringReader(xmlString));

2

Fikir, serileştirme için tüm seviyenin ele alınması Lütfen benzer sorunumu çözen örnek bir çözüme bakın

<?xml version="1.0" ?> 
 <TRANSACTION_RESPONSE>
    <TRANSACTION>
        <TRANSACTION_ID>25429</TRANSACTION_ID> 
        <MERCHANT_ACC_NO>02700701354375000964</MERCHANT_ACC_NO> 
        <TXN_STATUS>F</TXN_STATUS> 
        <TXN_SIGNATURE>a16af68d4c3e2280e44bd7c2c23f2af6cb1f0e5a28c266ea741608e72b1a5e4224da5b975909cc43c53b6c0f7f1bbf0820269caa3e350dd1812484edc499b279</TXN_SIGNATURE> 
        <TXN_SIGNATURE2>B1684258EA112C8B5BA51F73CDA9864D1BB98E04F5A78B67A3E539BEF96CCF4D16CFF6B9E04818B50E855E0783BB075309D112CA596BDC49F9738C4BF3AA1FB4</TXN_SIGNATURE2> 
        <TRAN_DATE>29-09-2015 07:36:59</TRAN_DATE> 
        <MERCHANT_TRANID>150929093703RUDZMX4</MERCHANT_TRANID> 
        <RESPONSE_CODE>9967</RESPONSE_CODE> 
        <RESPONSE_DESC>Bank rejected transaction!</RESPONSE_DESC> 
        <CUSTOMER_ID>RUDZMX</CUSTOMER_ID> 
        <AUTH_ID /> 
        <AUTH_DATE /> 
        <CAPTURE_DATE /> 
        <SALES_DATE /> 
        <VOID_REV_DATE /> 
        <REFUND_DATE /> 
        <REFUND_AMOUNT>0.00</REFUND_AMOUNT> 
    </TRANSACTION>
  </TRANSACTION_RESPONSE> 

Yukarıdaki XML iki düzeyde işlenir

  [XmlType("TRANSACTION_RESPONSE")]
public class TransactionResponse
{
    [XmlElement("TRANSACTION")]
    public BankQueryResponse Response { get; set; }

}

İç seviye

public class BankQueryResponse
{
    [XmlElement("TRANSACTION_ID")]
    public string TransactionId { get; set; }

    [XmlElement("MERCHANT_ACC_NO")]
    public string MerchantAccNo { get; set; }

    [XmlElement("TXN_SIGNATURE")]
    public string TxnSignature { get; set; }

    [XmlElement("TRAN_DATE")]
    public DateTime TranDate { get; set; }

    [XmlElement("TXN_STATUS")]
    public string TxnStatus { get; set; }


    [XmlElement("REFUND_DATE")]
    public DateTime RefundDate { get; set; }

    [XmlElement("RESPONSE_CODE")]
    public string ResponseCode { get; set; }


    [XmlElement("RESPONSE_DESC")]
    public string ResponseDesc { get; set; }

    [XmlAttribute("MERCHANT_TRANID")]
    public string MerchantTranId { get; set; }

}

Aynı şekilde car as array , çok düzeyli seriyi kaldırma için bu örneği kontrol edin


1

Eğer Xsd dosyası oluşturmak için Xsd.exe kullanarak hatalar alıyorsanız belirtildiği gibi, daha sonra XmlSchemaInference sınıfını kullanın msdn üzerinde . İşte bunu gösteren bir birim test:

using System.Xml;
using System.Xml.Schema;

[TestMethod]
public void GenerateXsdFromXmlTest()
{
    string folder = @"C:\mydir\mydata\xmlToCSharp";
    XmlReader reader = XmlReader.Create(folder + "\some_xml.xml");
    XmlSchemaSet schemaSet = new XmlSchemaSet();
    XmlSchemaInference schema = new XmlSchemaInference();

    schemaSet = schema.InferSchema(reader);


    foreach (XmlSchema s in schemaSet.Schemas())
    {
        XmlWriter xsdFile = new XmlTextWriter(folder + "\some_xsd.xsd", System.Text.Encoding.UTF8);
        s.Write(xsdFile);
        xsdFile.Close();
    }
}

// now from the visual studio command line type: xsd some_xsd.xsd /classes

1

XmlArrayItem'den XmlElment yerine Cars otomobil özelliği için bir özelliği değiştirebilirsiniz. Yani,

[System.Xml.Serialization.XmlRootAttribute("Cars", Namespace = "", IsNullable = false)]
public class Cars
{
    [XmlArrayItem(typeof(Car))]
    public Car[] Car { get; set; }
}

için

[System.Xml.Serialization.XmlRootAttribute("Cars", Namespace = "", IsNullable = false)]
public class Cars
{
    [XmlElement("Car")]
    public Car[] Car { get; set; }
}

1

Çözümüm:

  1. Edit > Past Special > Paste XML As ClassesSınıfı kodunuza almak için kullanın
  2. Bunun gibi bir şey deneyin: o sınıfın bir listesini oluşturun ( List<class1>), ardından XmlSerializerbu listeyi bir xmldosyaya serileştirmek için kullanın .
  3. Şimdi sadece bu dosyanın gövdesini verilerinizle değiştirip denemelisiniz deserialize.

Kod:

StreamReader sr = new StreamReader(@"C:\Users\duongngh\Desktop\Newfolder\abc.txt");
XmlSerializer xml = new XmlSerializer(typeof(Class1[]));
var a = xml.Deserialize(sr);
sr.Close();

NOT: kök adına dikkat etmelisiniz, değiştirmeyin. Benimki "ArrayOfClass1"


1
async public static Task<JObject> XMLtoNETAsync(XmlDocument ToConvert)
{
    //Van XML naar JSON
    string jsonText = await Task.Run(() => JsonConvert.SerializeXmlNode(ToConvert));

    //Van JSON naar .net object
    var o = await Task.Run(() => JObject.Parse(jsonText));

    return o;
}

1
Lütfen yanıtınızı yalnızca kodu yapıştırmak yerine her zaman bağlama yerleştirin. Daha fazla ayrıntı için buraya bakın.
gehbiszumeis
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.