5

में xsd.exe द्वारा जेनरेट की गई फ़ाइल का उपयोग कैसे कर सकता हूं मैं xsd.exe का उपयोग कर .xsd फ़ाइलों से .cs फ़ाइलों को उत्पन्न कर रहा हूं। लेकिन जब मैं विंडोज़ 10 सार्वभौमिक रिक्त ऐप में फ़ाइलों को जोड़ रहा हूं, तो मुझे सिस्टम के लिए "असेंबली संदर्भ गायब" के रूप में त्रुटि मिल रही थी। SerializableAttribute() और System.ComponentModel.DesignerCategoryAttribute ("code")। मैंने इसे @ t.ouvre की चाल से तय किया। फिर कोड की किसी भी विशेष पंक्ति में कोई त्रुटि नहीं थी, लेकिन जब मैं कोड बना रहा हूं तो मुझे यह कहते हुए एक त्रुटि मिल रही है कि "सिस्टम System.ComponentModel.MarshalByValueComponent मॉड्यूल System.dll में नहीं मिल सकता है" और यह बिल्कुल निर्दिष्ट नहीं करता है जहां त्रुटि है। मैं windows 10 सार्वभौमिक ऐप में xsd.exe द्वारा जेनरेट की गई फ़ाइल का उपयोग कैसे कर सकता हूं? सभी चीजें हैं जो मैं फ़ाइल (UWP में DataContractSerializer का प्रयोग करके) क्रमबद्धता और अक्रमांकन के लिए इसका इस्तेमाल करने के साथ क्या करने की जरूरतमैं विंडोज 10 सार्वभौमिक ऐप

/// <remarks/> 
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.81.0")] 
[System.SerializableAttribute()] 
[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] 
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)] 
public partial class request 
{ 

    private usertype userField; 

    private string versionField; 

    /// <remarks/> 
    [System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public usertype user 
    { 
     get 
     { 
      return this.userField; 
     } 
     set 
     { 
      this.userField = value; 
     } 
    } 

    /// <remarks/> 
    [System.Xml.Serialization.XmlAttributeAttribute()] 
    public string version 
    { 
     get 
     { 
      return this.versionField; 
     } 
     set 
     { 
      this.versionField = value; 
     } 
    } 
} 

/// <remarks/> 
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.81.0")] 
[System.SerializableAttribute()] 
[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
public partial class usertype 
{ 

    private string emailField; 

    private string passwordField; 

    /// <remarks/> 
    [System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public string email 
    { 
     get 
     { 
      return this.emailField; 
     } 
     set 
     { 
      this.emailField = value; 
     } 
    } 

    /// <remarks/> 
    [System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public string password 
    { 
     get 
     { 
      return this.passwordField; 
     } 
     set 
     { 
      this.passwordField = value; 
     } 
    } 
} 


/// <remarks/> 
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.81.0")] 
[System.SerializableAttribute()] 
[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] 
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)] 
public partial class NewDataSet 
{ 

    private request[] itemsField; 

    /// <remarks/> 
    [System.Xml.Serialization.XmlElementAttribute("request")] 
    public request[] Items 
    { 
     get 
     { 
      return this.itemsField; 
     } 
     set 
     { 
      this.itemsField = value; 
     } 
    } 
} 
+0

क्या आप जेनरेट की गई फाइल पोस्ट कर सकते हैं? –

+0

सिस्टम। SerializableAttribute(), System.ComponentModel.DesignerCategoryAttribute ("code") त्रुटि दिखा रहा है "अस्तित्व में नहीं है, एक असेंबली संदर्भ गुम है"। यह कंसोल एप्लिकेशन में कोई त्रुटि नहीं दिखाता है। – Fresher

+0

मैन्युअल रूप से गैर संकलन विशेषताओं को निकालना संभव है? (System.SerializableAttribute(), System.ComponentModel.DesignerCategoryAttribute ("कोड")) –

उत्तर

6

आप नकली गायब कक्षाएं (सिस्टम.SerializableAttribute(), System.ComponentModel कर सकते हैं।DesignerCategoryAttribute), बस शोध करे कक्षाएं परिभाषा के साथ नई फ़ाइलें जोड़ें:

namespace System 
{ 
    internal class SerializableAttribute : Attribute 
    { 
    } 
} 
namespace System.ComponentModel 
{ 
    internal class DesignerCategoryAttribute : Attribute 
    { 
     public DesignerCategoryAttribute(string _) { } 
    } 
} 

क्रमबद्धता और अक्रमांकन के लिए, आप System.Runtime.Serialization.DataContractSerializer उपयोग करना होगा। उदाहरण के लिए:

DataContractSerializer serializer = new DataContractSerializer(typeof(request)); 
var r = new request { version = "test" }; 

using (MemoryStream ms = new MemoryStream()) 
{ 
    serializer.WriteObject(ms, r); 
    ms.Seek(0, SeekOrigin.Begin); 
    using (var sr = new StreamReader(ms)) 
    { 
     string xmlContent = sr.ReadToEnd(); 
     Debug.WriteLine(xmlContent); 
     ms.Seek(0, SeekOrigin.Begin); 
     using (XmlReader reader = XmlReader.Create(sr)) 
     { 
      var deserialized = serializer.ReadObject(reader) as request; 
      if (deserialized != null && deserialized.version == r.version) 
      { 
       Debug.WriteLine("ok"); 
      } 
     } 
    } 
} 
+0

क्षमा करें। मेरे पास एक और मुद्दा है। कोड बनाने के दौरान निम्न त्रुटि आती है: Xaml आंतरिक त्रुटि त्रुटि WMC9999: मॉड्यूल System.dll में System.ComponentModel.MarshalByValueComponent टाइप नहीं कर सकता। – Fresher

+0

क्या आप इस त्रुटि से संबंधित कुछ कोड पोस्ट कर सकते हैं (या एक लिंक)? मुझे लगता है कि यह अंतिम त्रुटि पिछले से संबंधित नहीं है इसलिए मुझे अधिक जानकारी की आवश्यकता है –

+0

मैंने अभी कोड को जोड़ा जो यूडब्ल्यूपी को मेरे प्रश्न में है। मेरी प्रोजेक्ट में केवल दो फाइलें हैं (App.xaml.cs, myfile.cs (प्रश्न में कोड शामिल है))। मैंने पिछली त्रुटियों को इस विचार से छोड़ दिया है कि आपने मुझे दिया है। तब मुझे अपने कोड पर कोई त्रुटि नहीं थी। लेकिन कोड को संकलित करते समय, मुझे "System System.dll में टाइप सिस्टम नहीं मिल सका। कॉम्पोनेंट मॉडेल। मार्शलब्यवल्यू कॉम्पोनेंट"। – Fresher

0

SerializableAttribute() और DesignerCategoryAttribute UWP क्षुधा में समर्थित नहीं हैं क्या कर रहे हैं।

एक सफल वर्ग कि सीधे UWP एपी में कॉपी किया जा सकता का उत्पादन करने के लिए निम्न टिप का उपयोग करें:

यह एक UWP अनुप्रयोग में किया जाता है ताकि यू बस आगे बढ़ो और यह कर सकते हैं। वैसे एक्सएमएल क्रमबद्धता में कुछ सीमाएं हैं जिनके पास आपके पास किसी भी पैरामीटर के बिना एक डिफ़ॉल्ट कन्स्ट्रक्टर होना चाहिए।

यदि आप ऐसी कक्षा को क्रमबद्ध करने की योजना बना रहे हैं जिसमें कोई कंस्ट्रक्टर नहीं है तो माइक्रोसॉफ्ट ऐसे उपयोग मामलों के लिए DataContractSerializer का उपयोग करने के लिए प्रोत्साहित करता है।

अब कोड काफी सरल है

  1. पहले obj क्रमानुसार करने का दृष्टांत।
  2. एक नया XmlSerializer ऑब्जेक्ट बनाएं।
  3. फिर XmlWriter obj, क्योंकि यह कई अलग-अलग लेखक वर्गों में लेता है और आपको एक को तुरंत चालू करने की आवश्यकता है मैंने डेमो उद्देश्यों के लिए स्ट्रिंग बिल्डर चुना है।
  4. फिर बस अपने ओबीजे में गुजरने वाले सीरियलाइज़र ओबीजे पर क्रमबद्ध करें और xmlwriter और xml लेखक स्ट्रिंग बिल्डर ओबीजे में सेशन उत्पन्न करता है।
  5. तो मैं सिर्फ यह .. बारी एक स्ट्रिंग में यहां से यू एक्सएमएल के साथ कुछ भी कर सकते हैं .. उसे सहेज लें या इसके साथ खेलते हैं ..
  6. पिछले toupper विधि सिर्फ bcoz मैं डिबग के लिए एक लाइन की जरूरत जोड़ा गया है बात .. यह बिल्कुल आवश्यक नहीं है ...

      private void Button_Click(object sender , RoutedEventArgs e) 
           { 
            Animal a = new Animal("Sheep" , 4); 
            XmlSerializer m = new XmlSerializer(typeof(Animal)); 
            StringBuilder op = new StringBuilder(); 
            var x = XmlWriter.Create(op); 
            m.Serialize(x , a); 
    
            string s = op.ToString(); 
    
            var p = s.ToUpper(); 
           } 
    
           public class Animal 
           { 
            public Animal(string name , int legcount) 
            { 
             this.name = name; 
             this.legcount = legcount; 
            } 
    
            public Animal() 
            { 
             this.name = "default"; 
             this.legcount = 10000000; 
            } 
    
            public string name { get; set; } 
            public int legcount { get; set; } 
           } 
    

धारावाहिक वर्ग

<?xml version="1.0" encoding="utf-16"?> 
    <Animal xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <name>Sheep</name> 
    <legcount>4</legcount> 
    </Animal> 

अद्यतन की reult: इस विधि से आप पहली कॉपी कर सकते हैं अल ऐप में आपके क्रमबद्ध वर्गों में से एल और ऐप के अंदर आवश्यक होने पर उन्हें deserialize।

अब आपको बस इतना करना है कि आप अपने एक्सएमएल को अपने नए ऐप में कॉपी करें और उसी तकनीक का उपयोग करके deserilization को लागू करें जो मैंने ऊपर दिखाया है।

संबंधित मुद्दे