【问题标题】:Element 'timestamp' does not match any field or property of class (Log4Mongo deserialization)元素“时间戳”与类的任何字段或属性都不匹配(Log4Mongo 反序列化)
【发布时间】:2013-05-15 04:18:15
【问题描述】:

我正在构建一个 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"), “时间戳”: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 对象时出现错误,但不确定原因。非常感谢任何帮助或建议!

元素“时间戳”与类的任何字段或属性都不匹配


简单的解决方法是将 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; }

}

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    为什么你不改变

    <name value="timestamp" />
    

    <name value="TimeStamp" />
    

    ?

    【讨论】:

    • 当我使用 时,它不起作用。我不想使用 因为它不符合代码约定。这太奇怪了,也是我提出这个问题的原因。
    • 那我不确定你的问题。最好在 GitHub 问题中进一步讨论:github.com/log4mongo/log4mongo-net/issues/new
    猜你喜欢
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 2020-04-02
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多