繁体   English   中英

dot net平台是否提供了任何api来将字符串或字节数组转换为用户定义的对象?

[英]is there any api provided by dot net platform to convert a string or bytres array into user defined object?

假设我有输入数组字节 A[50];

我在数组中放置了三个不同的数据类型值,如下所示

  1. 长度为 42 字节的字符串(转换为二进制)
  2. long 长度为 4 个字节(转换为二进制)
  3. 长度为 4 个字节的浮点数(转换为二进制)

现在我已经定义了一个如下的架构

    <schemaforparsing>
          <field>
                <name>fieldname1</name>
                <type>string</type>
                <length>42</length>
          </field>

         <field>
               <name>fieldname2</name>
               <type>long</type>
               <length>4</length>
         </field>

         <field>
              <name>fieldname3</name>
               <type>float</type>
              <length>4</length>
         </field>
    </schemaforparsing>

我想将此字节数组解析为用户定义的对象。 用户定义对象的类应该从指定的模式生成。像在这种情况下类将如下

      classGenerated
      {
           String fieldname1[42];
           long fieldname2;
           float fiedlname3;
      }

所以基本上我想要一个组件,它将接受模式的输入并基于该模式,在解析数组中的二进制数据后,它将生成与事务模式相关的类对象。

dot net 3.5平台有提供这样的组件吗?

好吧,听起来您基本上想要某种形式的二进制序列化。

普通的内置 .NET 序列化适用于现有的类而不是模板,但我个人并不十分热衷于它。

如果你想要模板生成的类,我可以推荐协议缓冲区——可移植、紧凑、高效的序列化/反序列化。 有两个主要的 C# 端口 -我自己的Marc Gravell 的一个 当然,还有其他二进制序列化格式...... protobuf 只是我最熟悉的一种。

(已编辑)除了使用自己的“架构”的常用二进制序列化程序之外,框架中没有这样的组件。 实现自己可能并不难。 我想模式告诉你这样的事情:

  • 首先有 42 个字节被解释为字符串,分配给字段 'fieldname1'
  • 第二个有 4 个字节被解释为长,分配给字段 'fieldname2'
  • ...

应该不会太难。

如果没有上下文,这是一个很难回答的问题 - 您想用“用户定义”对象做什么?

如果您需要能够在运行时使用动态字段创建对象,一个可能的解决方案是等到 c# 4 的dynamic类型并反序列化为ExpandoObject ,请参阅ExpandoObject

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM