【Unity3D】XMLSerializerでシリアライズ→デシリアライズした時に特定の型(List<int[]>)がnullに

シェアする

正確には以下の環境で発生。

シリアライズ: .Net Framework 4.0
↓(TCPで送信)
デシリアライズ: Unity 4.1.2 f1

・・・そもそもそこでXMLSerializer使うのはどうなのという点は置いといて。。

とりあえず結論としては、monoのバグか何かのようで・・・

まず、.Net Framework4でシリアライズしたクラスの出力がこちら。

<?xml version="1.0"?>
<MyPacket xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <PacketType>N_Debug2MatchingInfo</PacketType>
  <Data xsi:type="N_Debug2MatchingInfo">
    <MatchineKeyNumber>1</MatchineKeyNumber>
    <IsHost>false</IsHost>
    <UnitPartes>
      <ArrayOfInt>
        <int>0</int>
        <int>0</int>
        <int>0</int>
(以下略)

続いてUnityで同じクラスをシリアライズしたクラスの出力がこちら

<?xml version="1.0" encoding="shift_jis"?>
<MyPacket xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <PacketType>N_Debug2MatchingInfo</PacketType>
  <Data xsi:type="N_Debug2MatchingInfo">
    <MatchineKeyNumber>1</MatchineKeyNumber>
    <IsHost>false</IsHost>
    <UnitPartes>
      <ArrayOfInt1>
        <int>0</int>
        <int>0</int>
        <int>0</int>
(以下略)

違いはencoding指定がついてるのと・・・ArrayOfInt1?なにこれ?

なおこの「ArrayOfInt」となるUnitPartesという変数の型は、List<int[]>です。

List<bool[]>とかList<byte[]>も同じようになるのかなあ・・・

まあ他の方法で代用すれば良いので、早速修正するか。。

余談ですが、int[ , ] も「2Dimensionはサポートされていません」みたいなこと言われてシリアライズ出来ないのでご注意。