标签: binary-serialization

.NET二进制序列化元数据

一周前,我遇到了一个情况,我必须阅读由其他人制作的另一个应用程序制作的二进制序列化对象.我只有someSerializedData.bin文件,因此我尝试手动重新创建未知对象的类定义,因为序列化文件中的元数据,我能够这样做.奇怪的是,我在谷歌上找不到任何工具.

Q1:为什么没有工具可以从二进制序列化文件/数据中重新创建类定义?

这导致了我的第二个问题

Q2:是否存在从序列化数据中恢复类定义的情况?(假设它没有以任何方式加密或混淆,我对涉及"默认".NET Binaryserializer属性的情况感兴趣,以禁用包含的类型信息和元数据)

c# metadata class definition binary-serialization

6
推荐指数
1
解决办法
1301
查看次数

反序列化通用列表返回null

我正在/如此序列化一个对象:

public class myClass : ISerializable
{
  public List<OType> value;

  public myClass(SerializationInfo info, StreamingContext context)
  {
    this.value = (List<OType>)info.GetValue("value", typeof(List<OType>));
  }

  void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
  {
    info.AddValue("value", value, typeof(List<OType>));
  }
}
Run Code Online (Sandbox Code Playgroud)

列表的对象具有Seri​​alizable属性.序列化时,不会抛出任何错误,列表永远不会为空,但是当反序列化我的所有列表都为空时,我不知道为什么.

我将此标记为CQ的回答.我能够生成一个小的测试应用程序,它正确地使用我正在尝试使用的对象进行序列化/反序列化但我仍然无法让它在我的生产代码中工作,但我怀疑它是小的我我失踪了.

c# serialization binary-serialization

5
推荐指数
2
解决办法
6030
查看次数

如何优化视图状态的类

如果我有一个对象需要存储在viewstate中,我可以做些什么来优化存储对象所需的大小?显然,存储最少量的数据将占用更少的空间,但除此之外,是否有方法来构建类,属性,属性等,这将影响序列化输出的大小?

asp.net viewstate serialization binary-serialization

5
推荐指数
1
解决办法
831
查看次数

为什么Get-Date似乎返回DateTime对象,但BinarySerializer指示它返回PSObject?

拿简单的HashTable:

$data = @{
    First = 'Justin';
    Last = 'Dearing';
    StartDate = Get-Date '2002-03-23';
}
Run Code Online (Sandbox Code Playgroud)

关键的StartDate似乎包含DateTime.

C:\Users\zippy\Documents> $data.StartDate.GetType().FullName
System.DateTime
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试对其执行二进制序列化,我会得到一个例外,抱怨PSObject不可序列化.

$ms = New-Object System.IO.MemoryStream
$bf = New-Object System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
$bf.Serialize($ms, $data)
$ms.Close()
Run Code Online (Sandbox Code Playgroud)

抛出:

DocumentsException calling "Serialize" with "2" argument(s): "Type 'System.Management.Automation.PSObject' in Assembly 'System.Management.Automation, Versio
n=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' is not marked as serializable."
At C:\Users\jdearing\AppData\Local\Temp\b8967f99-0a24-41f7-9c97-dad2bc288bd9.ps1:12 char:14
+ $bf.Serialize <<<< ($ms, $data)
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException
Run Code Online (Sandbox Code Playgroud)

如果我使用显式转换为[DateTime],这条消息消失了,一切正常:

$data = …
Run Code Online (Sandbox Code Playgroud)

powershell datetime binary-serialization psobject

5
推荐指数
2
解决办法
1227
查看次数

将byte []数组转换为DataTable

我在类型为varbinary的字段中将DataTable类型的对象保存到SQL 2005数据库中.我想要找回它,但我无法输入它.这就是我拯救它的方式.

MemoryStream memStream = new MemoryStream();
    StreamWriter sw = new StreamWriter(memStream);

sw.Write(dt);
con.Open();
using (SqlCommand cmd = new SqlCommand("INSERT INTO Tables(TableName, TableData, QuestionID) VALUES (@TableName, @TableData, @QuestionID)", con))
{
    cmd.Parameters.Add("@TableName", SqlDbType.VarChar).Value = "a new table";
    cmd.Parameters.Add("@TableData", SqlDbType.VarBinary,Int32.MaxValue).Value = memStream.GetBuffer();
    cmd.Parameters.Add("@QuestionID", SqlDbType.VarChar).Value = "2";
    cmd.ExecuteNonQuery();

}
Run Code Online (Sandbox Code Playgroud)

'dt'是DataTable对象实例.

c# sql ado.net binary-serialization

4
推荐指数
1
解决办法
3万
查看次数

将多个对象序列化为一个二进制文件

我有一个MDI应用程序,其中一个树视图控件停靠在左边,五个类包含树节点的信息,即那种节点的编辑器.

  • 我应该如何序列化应用程序,以便将所有对象序列化为单个二进制文件?

  • 如何将资源存储在其中,以便将单个文件发送到所有计算机?

谢谢.

c# serialization binary-serialization

4
推荐指数
1
解决办法
5058
查看次数

使用BinaryReader读/写可空类型?

我正在重载System.IO BinaryReader来序列化一些类以用于文件存储.我没有问题像字典这样的项目,但没有成功的可空类型.有可能吗?具体来说我正在尝试小数?和字符串?,但任何类型应该适合我调整我的解决方案.

出于特定的业务原因,我必须进行二进制序列化,因此请将响应限制为仅适用于此的解决方案.

例如...用于读取/写入字节数组我使用以下方法:

    public byte[] ReadByteArray()
    {
        int len = ReadInt32();
        if (len > 0) return ReadBytes(len);
        if (len < 0) return null;
        return new byte[0];
    }

    public override void Write(byte[] b)
    {
        int len = b.Length;
        Write(len);
        if (len > 0) base.Write(b);
    }
Run Code Online (Sandbox Code Playgroud)

c# nullable binary-serialization

4
推荐指数
2
解决办法
1835
查看次数

为什么不使用BinaryFormatter序列化未标记为Serializable的类?

众所周知,在MSDN网站上提到:

.NET Framework提供的序列化体系结构可以自动正确处理对象图和循环引用.对象图的唯一要求是被序列化的对象引用的所有对象也必须标记为Serializable.如果不这样做,当序列化程序尝试序列化未标记的对象时,将抛出异常.

我的问题是为什么要应用这种约束?(如果这是一个约束!;-))

c# serialization binary-serialization

4
推荐指数
1
解决办法
1156
查看次数

未标记为可序列化错误

我有一个类“实体”

[Serializable]
public class Entity
{
   public Guid Id { get; set; }
   public IEnumerable<Entity> ChildEntity { get; set; } 
}
Run Code Online (Sandbox Code Playgroud)

我会注意到它具有属性 ChildEntity,它是同一类实体的列表。

问题1。我是否必须显式序列化此列表?或者类上的 Serializable 属性将为我完成这项工作。

现在,当我尝试使用 Binary Serializer 对此类进行序列化时,出现异常,指出此类未标记为 Serializable。

我认为当它尝试序列化 childEntities 时会发生异常。

这是我的序列化代码。

public static T DeepClone<T>(T obj)
{
    using (var ms = new MemoryStream())
    {
        var formatter = new BinaryFormatter();

        try
        {
            formatter.Serialize(ms, obj);
        }
        catch (Exception Ex)
        {
           //TODO
    }
    }
}
Run Code Online (Sandbox Code Playgroud)

我还有一个类,其中实体类列表正在填充。

[Serializable]
public class AllEntity
{
    public Guid ParentId {get; set; }
    public Guid …
Run Code Online (Sandbox Code Playgroud)

c# serialization binary-serialization

4
推荐指数
1
解决办法
3184
查看次数

.NET Binary Serialize对象,引用其他对象...怎么了?

如果您有一个引用其他对象的对象实例A(例如实例B和C),并且您将A二进制序列化为文件,会发生什么?您现在有包含A,B和C的序列化数据吗?

它是如何工作的?如果我反序列化数据,我会得到什么?A,B和C ??

(随意包括内部工作原理解释).

.net object-reference binary-serialization object-graph

3
推荐指数
1
解决办法
2263
查看次数