2013-08-19 46 views
0

我有一个不寻常的设置,即将数据从PHP站点插入到MongoDB中。数据然后由.NET读取并作为API提供。使用.NET插入到MongoDB中的数据读取数据使用PHP

插入记录(通过PHP)后,.NET API在尝试读取数据时会引发以下错误。

An error occurred while deserializing the Id property of class Project.ModelClass: Cannot deserialize Guid from BsonType ObjectId. 

的代码做插件是:

$item = Item::create(array(
     // fields 
    )); 

而且正在读取的模型类为有这样一个ID字段:

 public Guid Id { get; set; } 

的API将正确地成为了其他项目在从另一个数据源导入的同一个集合中。

我是否需要在PHP插入中做一些特殊的事情来允许将Id读取并反序列化到.NET模型类中?

任何帮助将不胜感激!

斯图尔特

+0

您能告诉我们用PHP插入的MongoDB文档的样子吗? –

+0

PHP插入的Id看起来像'ObjectId(“xxx ... xx”)',.NET看起来像'BinData(3,“xxxx ... xxx”)'。理想情况下,我想保持.NET的一样,并改变PHP的匹配。 – Stuart

+0

你能举一个例子,说明PHP代码插入了哪些字段?从你的评论听起来你想要使用一个GUID作为文档的_id,但是你没有向我们展示PHP代码实际插入了哪些字段(它看起来像PHP代码插入一个ObjectId,而不是一个GUID)。 –

回答

1

从您的评论像你想使用GUID作为_id的文件它的声音,但是你有没有告诉我们实际上是由PHP代码插入哪些领域。

假如是这样的话,虽然,你的PHP代码将需要插入_idGUID明确,否则PHP驱动程序将在_id字段将自动设置为产生ObjectId

$collection->insert(array(
    "_id" => new MongoBinData($guid, 3) 
)); 

应设置_idGUID,而不是默认ObjectId

+0

感谢您的回应 - 将它保存为“真实”的GUID似乎可以让它工作。 – Stuart

1

尝试在C#与ObjectId取代Guid

public ObjectId Id { get; set; } 

Id场被存储为ObjectId类型。和C#程序不能反序列化ObjectId类型Guid

相关问题