元素'timestamp'与类的任何字段或属性都不匹配(Log4Mongo反序列化)

时间:2013-05-15 04:18:15

标签: mongodb

我正在构建一个Web应用程序并使用Log4Mongo将应用程序日志存储到Mongo数据库中的“Logs”集合中。

这是web.config中的MongoDBAppender

<appender name="MongoDBAppender" type="Log4Mongo.MongoDBAppender, Log4Mongo">
  <connectionString value="mongodb://localhost/insurancegrader?safe=true" />
  <collectionName value="Logs" />
  <field>
    <name value="timestamp" />
    <layout type="log4net.Layout.RawTimeStampLayout" />
  </field>
  <field>
    <name value="level" />
    <layout type="log4net.Layout.PatternLayout" value="%level" />
  </field>
  <field>
    <name value="thread" />
    <layout type="log4net.Layout.PatternLayout" value="%thread" />
  </field>
  <field>
    <name value="logger" />
    <layout type="log4net.Layout.PatternLayout" value="%logger" />
  </field>
  <field>
    <name value="message" />
    <layout type="log4net.Layout.PatternLayout" value="%message" />
  </field>
  <field>
    <name value="mycustomproperty" />
    <layout type="log4net.Layout.RawPropertyLayout">
      <key value="mycustomproperty" />
    </layout>
  </field>
</appender>

像这样的JSON格式

  

{     “_id”:ObjectId(“51921692a777da8788faa22c”),     “timestamp”:ISODate(“2013-05-14T10:48:50.018Z”),     “等级”:“错误”,     “线程”:“100”,     “logger”:“类的类型”,     “消息”:“这里的一些信息”   }

我构建了一个在反序列化后存储对象的类

public class LogEntry
{
    public ObjectId Id { get; set; }

    [BsonDateTimeOptions(Kind = DateTimeKind.Local)]
    [JsonProperty("timestamp")]
    public DateTime TimeStamp { get; set; }

    [JsonProperty("level")]
    public string Level { get; set; }

    [JsonProperty("logger")]
    public string Logger { get; set; }

    [JsonProperty("message")]
    public string Message { get; set; }
}

但是,在将日志JSON反序列化为LogEntry对象时却出现错误,但不确定原因。非常感谢任何帮助或建议!

  

元素'timestamp'与类

的任何字段或属性都不匹配

简单的解决方案是将LogEntry类的所有属性更改为与JSON格式相同(删除JsonProperty(...),但它导致约定代码问题)

公共类LogEntry {

public ObjectId Id { get; set; }

public DateTime timestamp{ get; set; }

public string level{ get; set; }

public string logger{ get; set; }

public string message{ get; set; }

}

1 个答案:

答案 0 :(得分:0)

为什么你不改变

<name value="timestamp" />

使用

<name value="TimeStamp" />