下面是我代码:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Xml.Serialization;
namespace XmSerializerT
{
    [Serializable]
    public class ClassA
    {
        private string str_;
        private int num_;
        public ClassA()
        {
        }
        public ClassA(string myStr, int myNum)
        {
            str_ = myStr;
            num_ = myNum;
        }
        public string Str
        {
            get { return str_; }
        }
        public int Num
        {
            get { return num_; }
        }
    }
    public class Program
    {
        static void Main(string[] args)
        {
            ClassA ca = new ClassA("Hello", 10);
            XmlSerializer xSerial = new XmlSerializer(typeof(ClassA));
            TextWriter write = new StreamWriter(@"D:\C#\Main\对象串行华\temp\po.xml");
            xSerial.Serialize(write,ca);//为什么串行化不了值
        }
    }
}序列化ca但在po.xml文件中没有显示保存了他的属性:
生成的po.xml文件内容:<?xml version="1.0" encoding="utf-8"?>
<ClassA xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
因该怎么才能保存啊
谁指点下。。谢谢。

解决方案 »

  1.   

    类被序列化,除了添加 [Serializable] 属性外,这个类也最好继承ISerializable 接口,例如:[Serializable]
    public class MyObject : ISerializable 
    {
      public int n1;
      public int n2;
      public String str;  public MyObject()
      {
      }  protected MyObject(SerializationInfo info, StreamingContext context)
      {
        n1 = info.GetInt32("i");
        n2 = info.GetInt32("j");
        str = info.GetString("k");
      }
    [SecurityPermissionAttribute(SecurityAction.Demand,SerializationFormatter 
    =true)]
      public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
      {
        info.AddValue("i", n1);
        info.AddValue("j", n2);
        info.AddValue("k", str);
      }
    }
      

  2.   

    [Serializable]
        public class ClassA
        {
            private string str_;
            private int num_;
            public ClassA()
            {
            }
            public ClassA(string myStr, int myNum)
            {
                str_ = myStr;
                num_ = myNum;
            }
            public string Str
            {
                get { return str_; }
                set { str_ = value; }
            }
            public int Num
            {
                get { return num_; }
                set { num_ = value; }
            }
        } 
    ClassA   ca   =   new   ClassA( "Hello ",   10); 
                XmlSerializer mySerializer = new XmlSerializer(typeof(ClassA));
                StreamWriter myWriter = new StreamWriter(@"e:\po.xml");
                XmlSerializerNamespaces xmlns = new XmlSerializerNamespaces();
                xmlns.Add(String.Empty, String.Empty);
                mySerializer.Serialize(myWriter, ca, xmlns);
                myWriter.Close();
      

  3.   

    根据两位的改:
    现在得到结果如下:
    <?xml version="1.0" encoding="utf-8"?>
    <ClassA />还是没保存属性值啊。。
    晕了。
      

  4.   

    根据两位的改:
    现在得到结果如下:
    <?xml version="1.0" encoding="utf-8"?>
    <ClassA />还是没保存属性值啊。。
    晕了。
      

  5.   

    要序列化对象,使用XmlSerializer只能序列化公用变量或字段且是可读写的,私有的不可以,代码参考如下第一个示例;若要也序列化私有的,要使用BinaryFormatter才可以,见第二个代码。namespace XmSerializerT
    {
    [Serializable]
    public class ClassA
    {
    private string str_;
    private int num_;
    public ClassA()
    {
    }
    public ClassA(string myStr, int myNum)
    {
    str_ = myStr;
    num_ = myNum;
    }
    public string Str
    {
    get { return str_; }
    set {
    str_ = value;
    }
    }
    public int Num
    {
    get { return num_; }
    set
    {
    this.num_ = value;
    }
    }
    }
    public class Program
    {
    static void Main(string[] args)
    {
    ClassA ca = new ClassA("Hello ", 10);
    XmlSerializer xSerial = new XmlSerializer(typeof(ClassA));
    StreamWriter write = new StreamWriter(@"D:\temp\po.xml ");
    xSerial.Serialize(write, ca);//为什么串行化不了值 
    }
    }
    }namespace XmSerializerT
    {
    [Serializable]
    public class ClassA : ISerializable
    {
    private string str_;
    private int num_;
    public ClassA()
    {
    }
    protected ClassA(SerializationInfo info, StreamingContext context)
    {
    this.str_ = info.GetString("str_");
    this.num_=info.GetInt32("num_");
    }
    public ClassA(string myStr, int myNum)
    {
    str_ = myStr;
    num_ = myNum;
    }
    public string Str
    {
    get { return str_; }
    set {
    str_ = value;
    }
    }
    public int Num
    {
    get { return num_; }
    set
    {
    this.num_ = value;
    }
    } public void GetObjectData(SerializationInfo info, StreamingContext context)
    {
    info.AddValue("str", str_);
    info.AddValue("num_", num_);
    }
    }
    public class Program
    {
    static void Main(string[] args)
    {
    IFormatter formatter = new BinaryFormatter();
    Stream stream = new FileStream(@"D:\temp\po.xml", FileMode.Create, FileAccess.Write, FileShare.None);
    formatter.Serialize(stream, ca);
    stream.Close();
    }
    }
    }
      

  6.   

    要序列化对象,使用XmlSerializer只能序列化公用变量或字段且是可读写的,私有的不可以,代码参考如下第一个示例;若要也序列化私有的,要使用BinaryFormatter才可以,见第二个代码。namespace XmSerializerT
    {
    [Serializable]
    public class ClassA
    {
    private string str_;
    private int num_;
    public ClassA()
    {
    }
    public ClassA(string myStr, int myNum)
    {
    str_ = myStr;
    num_ = myNum;
    }
    public string Str
    {
    get { return str_; }
    set {
    str_ = value;
    }
    }
    public int Num
    {
    get { return num_; }
    set
    {
    this.num_ = value;
    }
    }
    }
    public class Program
    {
    static void Main(string[] args)
    {
    ClassA ca = new ClassA("Hello ", 10);
    XmlSerializer xSerial = new XmlSerializer(typeof(ClassA));
    StreamWriter write = new StreamWriter(@"D:\temp\po.xml ");
    xSerial.Serialize(write, ca);//为什么串行化不了值 
    }
    }
    }namespace XmSerializerT
    {
    [Serializable]
    public class ClassA : ISerializable
    {
    private string str_;
    private int num_;
    public ClassA()
    {
    }
    protected ClassA(SerializationInfo info, StreamingContext context)
    {
    this.str_ = info.GetString("str_");
    this.num_=info.GetInt32("num_");
    }
    public ClassA(string myStr, int myNum)
    {
    str_ = myStr;
    num_ = myNum;
    }
    public string Str
    {
    get { return str_; }
    set {
    str_ = value;
    }
    }
    public int Num
    {
    get { return num_; }
    set
    {
    this.num_ = value;
    }
    } public void GetObjectData(SerializationInfo info, StreamingContext context)
    {
    info.AddValue("str", str_);
    info.AddValue("num_", num_);
    }
    }
    public class Program
    {
    static void Main(string[] args)
    {
    IFormatter formatter = new BinaryFormatter();
    Stream stream = new FileStream(@"D:\temp\po.xml", FileMode.Create, FileAccess.Write, FileShare.None);
    formatter.Serialize(stream, ca);
    stream.Close();
    }
    }
    }
      

  7.   

    输出XML为如下:
    <?xml version="1.0" encoding="utf-8"?>
    <ClassA xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <Str>Hello </Str>
      <Num>10</Num>
    </ClassA>
      

  8.   

    hbxtlhx
    你好,我用的C#.net3.5wince 环境下的写的类,但是在wince下不支持二进制的序列化,只有xml,那该怎么办啊?求帮助?邮箱:[email protected]