gpt4 book ai didi

c# - 将 Mongodb 字符串反序列化为对象

转载 作者:可可西里 更新时间:2023-11-01 10:31:07 27 4
gpt4 key购买 nike

我有一个对象作为我为其创建自定义序列化程序的属性。它所做的只是调用 ToString,因为我想在我的集合中将数据表示为字符串。

cm.MapMember(c => c.myObjectProperty).SetSerializer(new ObjectToStringSerializer() );

上面只调用一次并且在保存数据时运行良好。我可以看到具有预期字符串值的父对象。

这是基本的序列化程序:

public class ObjectToStringSerializer : IBsonSerializer {


#region IBsonSerializer Members

public object Deserialize(MongoDB.Bson.IO.BsonReader bsonReader, Type nominalType, Type actualType, IBsonSerializationOptions options)
{
if (bsonReader.State == MongoDB.Bson.IO.BsonReaderState.Type && bsonReader.CurrentBsonType != MongoDB.Bson.BsonType.Null)
return Activator.CreateInstance(nominalType, new object[] { bsonReader.ReadString() });
return null;
}

public object Deserialize(MongoDB.Bson.IO.BsonReader bsonReader, Type nominalType, IBsonSerializationOptions options)
{

if( bsonReader.State == MongoDB.Bson.IO.BsonReaderState.Type && bsonReader.CurrentBsonType != MongoDB.Bson.BsonType.Null)
return Activator.CreateInstance(nominalType, new object[] { bsonReader.ReadString() });
return null;
}

public IBsonSerializationOptions GetDefaultSerializationOptions()
{
throw new NotImplementedException();
}

public void Serialize(MongoDB.Bson.IO.BsonWriter bsonWriter, Type nominalType, object value, IBsonSerializationOptions options)
{


if (value != null)
{
bsonWriter.WriteString(value.ToString());
}
else
bsonWriter.WriteNull();

}

#endregion
}

当我试图从集合中取回父对象时抛出异常:

ReadBsonType can only be called when State is Type, not when State is Value.

而且堆栈跟踪看起来不像是在尝试调用我的自定义序列化程序的反序列化方法。

为了调用我期望的反序列化方法,我缺少什么?我试过添加一个简单的序列化提供程序,但我认为那不对。我也试过重新注册序列化程序。

BsonSerializer.RegisterSerializer(typeof(myObjectPropertyType), new ObjectToStringSerializer());

最佳答案

问题是我对 Deserialize 成员的条件。

if (bsonReader.State == MongoDB.Bson.IO.BsonReaderState.Type && bsonReader.CurrentBsonType != MongoDB.Bson.BsonType.Null)

从来没有给创作者打电话。我已经将其更改为

if (bsonReader.State == MongoDB.Bson.IO.BsonReaderState.Value && bsonReader.CurrentBsonType == MongoDB.Bson.BsonType.String)

关于c# - 将 Mongodb 字符串反序列化为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24835030/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com