[英]MongoDB MapReduce issue in C#
我正在使用C#开发相对简单的MongoDB MapReduce演示。
代码如下:
public List<CategorySummaryResult> GetCategorySummaries()
{
string map = @"
function() {
var key = this.FeedType;
var value = {count: 1, names: this.Name};
emit(key, value);
}";
string reduce = @"
function(key, values) {
var result = {count: 0, names: ''};
values.forEach(function(value) {
result.count += value.count;
result.names += ',' + value.names;
});
return result;
}";
string finalize = @"
function(key, value) {
if (value.names.charAt(0) === ',')
value.names = value.names.substr(1);
return value;
}";
var options =
MapReduceOptions
.SetFinalize(finalize)
.SetOutput(MapReduceOutput.Inline);
var result =
_db.GetCollection("NewsCategories")
.MapReduce(map, reduce, options)
.GetInlineResultsAs<CategorySummaryResult>()
.ToList();
return result;
}
反序列化的对象为:
public class CategorySummaryResult
{
public double id { get; set; }
public ICollection<CategorySummary> value { get; set; }
}
public class CategorySummary
{
public double count { get; set; }
public string names { get; set; }
}
这是BSON输出的样子:
[0]: { "_id" : 1.0, "value" : { "count" : 3.0, "names" : "Games,Technologie,Auto" } }
[1]: { "_id" : 2.0, "value" : { "count" : 1.0, "names" : "Hoofdpunten" } }
但是我一直收到以下异常:
An error occurred while deserializing the value property of class MetroNews.Managers.CategorySummaryResult:
Expected element name to be '_t', not 'count'.
怎么了, 我该如何解决 ?
您不能正确地序列化/反序列化一个ICollection。
它将很好地序列化为任何对象的列表,但是当您想反序列化时会出现问题。
如果不通过约定指定,则反序列化器无法实例化ICollection,并且不知道要使用哪种特定类型。
你应该改变
public class CategorySummaryResult
{
public double id { get; set; }
public ICollection<CategorySummary> value { get; set; }
}
像
public class CategorySummaryResult
{
public double id { get; set; }
public List<CategorySummary> value { get; set; }
}
尝试将[BsonDiscriminatorAttribute(required=true)]
到CategorySummary
类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.