Просмотр исходного кода

修复StructBsonSerialize的bug

tanghai 3 лет назад
Родитель
Сommit
052b3046f8
1 измененных файлов с 24 добавлено и 8 удалено
  1. 24 8
      Unity/Assets/Scripts/Core/Mongo/StructBsonSerialize.cs

+ 24 - 8
Unity/Assets/Scripts/Core/Mongo/StructBsonSerialize.cs

@@ -37,15 +37,31 @@ namespace ET
 
             bsonReader.ReadStartDocument();
 
-            while (bsonReader.ReadBsonType() != BsonType.EndOfDocument)
+            while (bsonReader.State != BsonReaderState.EndOfDocument)
             {
-                string name = bsonReader.ReadName(Utf8NameDecoder.Instance);
-
-                FieldInfo field = actualType.GetField(name,BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
-                if (field != null)
+                switch (bsonReader.State)
                 {
-                    object value = BsonSerializer.Deserialize(bsonReader, field.FieldType);
-                    field.SetValue(obj, value);
+                    case BsonReaderState.Name:
+                    {
+                        string name = bsonReader.ReadName(Utf8NameDecoder.Instance);
+                        FieldInfo field = actualType.GetField(name);
+                        if (field != null)
+                        {
+                            object value = BsonSerializer.Deserialize(bsonReader, field.FieldType);
+                            field.SetValue(obj, value);
+                        }
+                        break;
+                    }
+                    case BsonReaderState.Type:
+                    {
+                        bsonReader.ReadBsonType();
+                        break;
+                    }
+                    case BsonReaderState.Value:
+                    {
+                        bsonReader.SkipValue();
+                        break;
+                    }
                 }
             }
 
@@ -54,4 +70,4 @@ namespace ET
             return (TValue) obj;
         }
     }
-}
+}