【问题标题】:The input stream is not a valid binary format输入流不是有效的二进制格式
【发布时间】:2012-11-05 12:51:55
【问题描述】:

我想反序列化我的“DataStore”以获取类型列表。首先,我想用 XMLSerializer 在 XMl 中制作这些,但他似乎不喜欢接口、抽象类和类型……但没有解决方法,所以我需要将我的主要内容存储在 XML 类中:

public class InstalledObjects
{
    private InstalledObjects()
    {

    }

    static InstalledObjects _instance = new InstalledObjects();

    ObservableCollection<AbstrICTSUseObject> _installedObects = new ObservableCollection<AbstrICTSUseObject>();        

    public static InstalledObjects Instance
    {
        get { return _instance; }
        set { _instance = value; }
    }

    public ObservableCollection<AbstrICTSUseObject> InstalledObects
    {
        get { return _installedObects; }
        set { _installedObects = value; }
    }

    public void Saves()
    {
        List<Type> types = new List<Type>();

        foreach (var item in InstalledObects)
        {
            types.Add( item.GetType() );
        }

        TypeStore ts = new TypeStore();
        ts.Typen = types;
        ts.SaveAsBinary("TypeStore.xml");
        this.SaveAsXML("LocalDataStore.xml", types.ToArray());
    }

    public void Load()
    {
        if (File.Exists("LocalDataStore.xml"))
        {
            TypeStore ts = new TypeStore();
            ts.LoadFromBinary("LocalDataStore.xml");
            this.LoadFromXML("LocalDataStore.xml",ts.Typen.ToArray()); 
        }
    }
}

并将我的类型存储在一个简单的类中:

[Serializable]
public class TypeStore
{
    List<Type> _typen = new List<Type>();

    public List<Type> Typen
    {
        get { return _typen; }
        set { _typen = value; }
    }
}

好的,我认为只要我保存所有内容就可以了,而且我认为如果没有“LoadFromBinary”引发一些实验的小问题,这也可以工作-.-

    public static void SaveAsBinary(this Object A, string FileName)
    {
        FileStream fs = new FileStream(FileName, FileMode.Create);
        BinaryFormatter formatter = new BinaryFormatter();
        formatter.Serialize(fs, A);
    }

    public static void LoadFromBinary(this Object A, string FileName) 
    {
        if (File.Exists(FileName))
        {
            Stream fs = new FileStream(FileName, FileMode.Open);
            BinaryFormatter formatter = new BinaryFormatter();
            A = formatter.Deserialize(fs) ;
        }
    }

远征:

     The input stream is not a valid binary format. The starting contents (in bytes) are: 3C-3F-78-6D-6C-20-76-65-72-73-69-6F-6E-3D-22-31-2E ...

感谢文森的帮助 :-)

【问题讨论】:

    标签: c# xml serialization binaryfiles bufferedinputstream


    【解决方案1】:

    这是否就像您从错误的文件中读取的事实一样简单?

    注意:

    ts.SaveAsBinary("TypeStore.xml");
    this.SaveAsXML("LocalDataStore.xml", types.ToArray());
    

    然后:

    ts.LoadFromBinary("LocalDataStore.xml");
    this.LoadFromXML("LocalDataStore.xml", ts.Typen.ToArray());
    

    应该是:

    ts.LoadFromBinary("TypeStore.xml");
    this.LoadFromXML("LocalDataStore.xml", ts.Typen.ToArray());
    

    但是,请注意,将其称为 .xml 具有误导性。另外:注意版本控制 - BinaryFormatter 是一个真正的猪。就个人而言,我只是手动序列化每种类型的 AssemblyQualifiedName - 这可以在普通 xml 中完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-07
      • 2011-09-29
      • 1970-01-01
      • 2020-10-16
      相关资源
      最近更新 更多