C#和MongoDB。无法完全保存Exception对象

时间:2015-05-15 16:41:36

标签: c# .net mongodb nosql

我有一个包含一些字符串属性和一个“Exception”属性的类。 保存对象时,MongoDB中的所有字符串属性都是正常的,但异常部分属性是部分的。只有属性“_t”和“HResult”存在。

“Message”,“InnerException”,“StackTrace”等等发生了什么?

我可以将这样的对象保存到MongoDB吗?

我的班级:

public class TraceLogEntity: MongoRepository.Entity {
public string ClassName {
    get;
    set;
}
public Exception Exception {
    get;
    set;
}
public string MethodName {
    get;
    set;
}
}

MongoDB上的一块对象:

{
"_id": ObjectId("55560138c57b9957202cae5a"),
"CreatedAt": ISODate("2015-05-05T03:00:00Z"),
"UserLogin": "UserLogin 3",
"ClassName": "ClassName 3",
"Exception": {
    "_t": "LogException",
    "HelpLink": null,
    "Source": null,
    "HResult": -2146233088
},
"MethodName": "MethodName 3"
}

我正在使用MongoRepository:https://github.com/RobThree/MongoRepository

提前致谢!!

1 个答案:

答案 0 :(得分:4)

.NET Exception类未标记为Serializable。这可能会影响您在MongoDB中获取Message,InnerException等的能力。 MongoRepository使用的JSON库无法从类中获取这些属性。

我要做的是将这些字段添加到TraceLogEntity类中,而不是使用Exception对象。所以它看起来像:

public class TraceLogEntity : MongoRepository.Entity
{
    public string ClassName { get; set; }
    public string Message { get; set; }
    public string StackTrace { get; set; }
    public TraceLogEntity InnerException { get; set; }
    public string MethodName { get; set; }
}