@@ -75,7 +75,7 @@ private void DumpCustomAttributes(DumpAllTable dumpTable)
7575 {
7676 foreach ( var value in ma . CustomAttributes [ 0 ] . ConstructorArguments )
7777 {
78- attribute . FixedArgs . Add ( BuildFixedArgsAttribute ( value ) ) ;
78+ attribute . FixedArgs . AddRange ( BuildFixedArgsAttribute ( value ) ) ;
7979 }
8080 }
8181
@@ -98,45 +98,39 @@ private void DumpCustomAttributes(DumpAllTable dumpTable)
9898 {
9999 foreach ( var value in fa . CustomAttributes [ 0 ] . ConstructorArguments )
100100 {
101- attribute . FixedArgs . Add ( BuildFixedArgsAttribute ( value ) ) ;
101+ attribute . FixedArgs . AddRange ( BuildFixedArgsAttribute ( value ) ) ;
102102 }
103103 }
104104
105105 dumpTable . Attributes . Add ( attribute ) ;
106106 }
107107 }
108+ }
109+ }
108110
109- var attribute1 = new AttributeCustom ( )
110- {
111- Name = a . Module . Assembly . Name . Name ,
112- ReferenceId = a . MetadataToken . ToInt32 ( ) . ToString ( "x8" ) ,
113- TypeToken = a . CustomAttributes [ 0 ] . Constructor . MetadataToken . ToInt32 ( ) . ToString ( "x8" )
114- } ;
111+ private List < AttFixedArgs > BuildFixedArgsAttribute ( CustomAttributeArgument value )
112+ {
113+ if ( value . Type . IsArray && value . Type . GetElementType ( ) . FullName == "System.Object" )
114+ {
115+ var attArgs = new List < AttFixedArgs > ( ) ;
115116
116- if ( a . CustomAttributes [ 0 ] . HasConstructorArguments )
117+ foreach ( var attributeArgument in ( CustomAttributeArgument [ ] ) value . Value )
117118 {
118- foreach ( var value in a . CustomAttributes [ 0 ] . ConstructorArguments )
119- {
120- attribute1 . FixedArgs . Add ( BuildFixedArgsAttribute ( value ) ) ;
121- }
119+ attArgs . AddRange ( BuildFixedArgsAttribute ( ( CustomAttributeArgument ) attributeArgument . Value ) ) ;
122120 }
123121
124- dumpTable . Attributes . Add ( attribute1 ) ;
122+ return attArgs ;
125123 }
126- }
127124
128- private AttFixedArgs BuildFixedArgsAttribute ( CustomAttributeArgument value )
129- {
130125 var serializationType = value . Type . ToSerializationType ( ) ;
131126
132127 var newArg = new AttFixedArgs ( )
133128 {
134129 Options = ( ( byte ) serializationType ) . ToString ( "X2" ) ,
135- Numeric = 0 . ToString ( "X16" ) ,
136130 Text = "" ,
137131 } ;
138132
139- switch ( serializationType )
133+ switch ( serializationType )
140134 {
141135 case nanoSerializationType . ELEMENT_TYPE_BOOLEAN :
142136 newArg . Numeric = ( ( bool ) value . Value ) ? 1 . ToString ( "X16" ) : 0 . ToString ( "X16" ) ;
@@ -146,12 +140,48 @@ private AttFixedArgs BuildFixedArgsAttribute(CustomAttributeArgument value)
146140 newArg . Text = ( string ) value . Value ;
147141 break ;
148142
149- default :
143+ case nanoSerializationType . ELEMENT_TYPE_OBJECT :
144+ newArg . Text = ( string ) value . Value ;
145+ break ;
146+
147+ case nanoSerializationType . ELEMENT_TYPE_I1 :
148+ newArg . Numeric = ( ( sbyte ) value . Value ) . ToString ( "X16" ) ;
149+ break ;
150+
151+ case nanoSerializationType . ELEMENT_TYPE_I2 :
152+ newArg . Numeric = ( ( short ) value . Value ) . ToString ( "X16" ) ;
153+ break ;
154+
155+ case nanoSerializationType . ELEMENT_TYPE_I4 :
150156 newArg . Numeric = ( ( int ) value . Value ) . ToString ( "X16" ) ;
151157 break ;
158+
159+ case nanoSerializationType . ELEMENT_TYPE_I8 :
160+ newArg . Numeric = ( ( long ) value . Value ) . ToString ( "X16" ) ;
161+ break ;
162+
163+ case nanoSerializationType . ELEMENT_TYPE_U1 :
164+ newArg . Numeric = ( ( byte ) value . Value ) . ToString ( "X16" ) ;
165+ break ;
166+
167+ case nanoSerializationType . ELEMENT_TYPE_U2 :
168+ newArg . Numeric = ( ( ushort ) value . Value ) . ToString ( "X16" ) ;
169+ break ;
170+
171+ case nanoSerializationType . ELEMENT_TYPE_U4 :
172+ newArg . Numeric = ( ( uint ) value . Value ) . ToString ( "X16" ) ;
173+ break ;
174+
175+ case nanoSerializationType . ELEMENT_TYPE_U8 :
176+ newArg . Numeric = ( ( ulong ) value . Value ) . ToString ( "X16" ) ;
177+ break ;
178+
179+ default :
180+ newArg . Text = value . Value . ToString ( ) ;
181+ break ;
152182 }
153183
154- return newArg ;
184+ return new List < AttFixedArgs > ( ) { newArg } ;
155185 }
156186
157187 private void DumpUserStrings ( DumpAllTable dumpTable )
0 commit comments