やりたいこと
Unityでセーブデータを保存する際にJsonテキストへのシリアライズを行うのが良く使われる方法の一つかと思います。
データをシリアライズした結果のJsonテキストをstreamに書き出そうとしたのですが、
C#の制限で1つの配列が保持できる要素数がint32.MaxValueの半分2147483591個
https://stackoverflow.com/questions/21408786/maximum-number-of-elements-in-an-array-vs-maximum-indexer-value
の制限に引っかかってしまいました。
普通のC#アプリではこの制限を拡張し、2147483591個以上の配列を持てるようにする方法があるようです。
(C#のApp.configに設定を追記するのかな?)
やりたいこととしてはUnityで上記C#での方法を実現したいです。
(UnityではApp.configに対応するものはどこに作られるのでしょうか?)
よろしくお願いいたします。
やってみたこと
シリアライズしたい構造体dataがあって、これはかなり大きなデータを持っています。
System.Runtime.Serialization.Json.DataContractJsonSerializer.WriteObject(stream, data)
の部分でdataのシリアライズ結果の文字列をstreamに書き出しています。ここでシリアライズ結果の文字数が2147483591個を超えると、stream内のバイト配列の要素数が上限を超えるためエラーが起きます。
C#
1 using(System.IO.MemoryStream stream = new System.IO.MemoryStream()) 2 using (var fs = new FileStream(path, FileMode.Create, FileAccess.Write)) 3 { 4 System.Runtime.Serialization.Json.DataContractJsonSerializer serializer 5 = new System.Runtime.Serialization.Json.DataContractJsonSerializer(data.GetType()); 6 serializer.WriteObject(stream, data); 7 } 8
回答3件
あなたの回答
tips
プレビュー