3

I wish to write a structure made up of fixed length strings to a file using My.Computer.FileSystem.WriteAllBytes or the like.

I am using a VB6 project with fixed length strings that I have converted in to VB.Net.

    Structure Record
        <VBFixedString(22),System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValArray,SizeConst:=22)> Public tim() As Char
        <VBFixedString(130),System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValArray,SizeConst:=130)> Public des() As Char
        <VBFixedString(2),System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValArray,SizeConst:=2)> Public crlf() As Char
    End Structure

Still new to marshalling in C#, but how would I get this structure to an array of bytes to write to a file. Is there some marshalling trick or am I going to have to write a custom method?

user142350
  • 222
  • 4
  • 15

1 Answers1

5

Use serialization mechanisms provided by the .NET framework:

Dim formatter As New BinaryFormatter
formatter.Serialize(outputFileStream, objectInstance)

You should add <Serializable()> attribute to your type.

mmx
  • 402,675
  • 87
  • 836
  • 780
  • 1
    @dnh828, To add to @Mehrdad's answer, also make sure all the types in the object graph you are trying to convert are decorated with the [Serializable] attribute... – Charles Bretana Aug 17 '09 at 16:35
  • 1
    How do I apply the serializable attribute to these fixed length strings? – user142350 Aug 17 '09 at 17:49
  • You don't need to. Just apply it to the `Structure`. `Char` arrays are serializable. – mmx Aug 17 '09 at 17:58