5

xsd.exeを使用して.xsdファイルから.csファイルを生成しています。しかし、私はWindows 10の普遍的な空のアプリケーションにファイルを追加するとき、私はSystem.SerializableAttribute()とSystem.ComponentModel.DesignerCategoryAttribute( "コード")の "アセンブリ参照がない"というエラーを受け取りました。私は@ t.ouvreのトリックでこれを修正しました。その後、コードの特定の行にエラーはありませんでしたが、コードをビルドするときに「System.ComponentModel.MarshalByValueComponent型がSystem.dll内に見つかりません」というエラーが表示され、エラーはどこにありますか。 xsd.exeによって生成されたファイルをWindows 10のユニバーサルアプリケーションで使用するにはどうすればよいですか? SerializableAttribute() とDesignerCategoryAttribute がUWPアプリケーションでサポートされていません。私は(UWPにDataContractSerializerを使用して)シリアル化および逆シリアル化のためにそれを使用して、ファイルを実行する必要があるすべてのものWindows 10の普遍的なアプリケーションでxsd.exeによって生成されたファイルを使用する方法

/// <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

System.SerializableAttribute()、System.ComponentModel.DesignerCategoryAttribute( "code")は、 "存在しない、アセンブリ参照がありません"というエラーを表示しています。コンソールアプリケーションでエラーが表示されません。 – Fresher

+0

非コンパイル属性を手動で削除することは可能ですか? (System.SerializableAttribute()、System.ComponentModel.DesignerCategoryAttribute( "code")) –

答えて

6

不足しているクラス(System.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

私はちょうどUWPに私の質問にあるコードを追加しました。私のプロジェクトには2つのファイルしかありません(App.xaml.cs、myfile.cs(質問のコードを含んでいます))。あなたが私に与えてくれたアイデアによって、以前のエラーを単純にスキップしました。それから私は自分のコードに誤りはなかった。しかし、コードをコンパイルしているうちに、 "System.ComponentModel.MarshalByValueComponent型がSystem.dllモジュールに見つかりません"というメッセージが表示されていました。 – Fresher

0

はどのようなものです。

次のヒントを使用し、UWP APに直接コピーすることができます成功したクラスを生成するには:uはちょうど先に行くと、これを行うことができますので

。これはUWPアプリで行われます。 XMLシリアル化にはいくつかの制限があります。これは、パラメータを持たないデフォルトのコンストラクタが必要であるということです。

コンストラクタを持たないクラスをシリアル化しようとしている場合は、マイクロソフトはそのような使用例に対してDataContractSerializerを使用することを推奨します。

今のコードは

  1. 最初にシリアライズするOBJをインスタンス化し、非常に簡単です。
  2. 新しいXmlSerializerオブジェクトを作成します。
  3. それから、XmlWriter objは多くの異なるライタークラスを取り入れています。私はデモ用に文字列ビルダーを選択しました。
  4. 次に、objとxmlwriterを渡すシリアライザobjでserializeを呼び出すと、xmlライターは文字列ビルダーobjでopを生成します。 uはXMLで何かを行うことができ、ここから
  5. は、その後私はちょうど私がデバッグのためにラインを必要とbcoz
  6. 最後TOUPPER方法

  7. がちょうど追加されました..それを保存したり、それで遊ぶ..文字列にそれを回しますポイント...それは全く必要はありません...

      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; } 
           } 
    

直列化されたクラスのreult

<?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> 

UPDATE:この方法であなたはアルを最初にコピーすることができますあなたのシリアライズされたクラスをアプリに組み込み、必要に応じてアプリ内でデシリアライズします。

あなたがする必要があるのは、xmlをurの新しいアプリにコピーして、上に示したのと同じテクニックを使用して無駄を実装することだけです。

関連する問題