2012-02-29 69 views
13

有没有一种方法可以自动添加评论到JSON.Net的序列化输出?如何向Json.NET输出添加注释?

理想我想它类似于下面的内容:

public class MyClass 
{ 
    [JsonComment("My documentation string")] 
    public string MyString { get; set; } 
} 

或(甚至更好,如果是可以避免的注释):

public class MyClass 
{ 
    /// <summary> 
    /// My documentation string 
    /// </summary> 
    public string MyString { get; set; } 
} 

会产生:

{ 
    //My documentation string 
    "MyString": "Test" 
} 

我问的原因是我们使用Json.NET来串行化配置稍后可以手动更改的文件。我想在我的C#配置类中包含文档,并将其复制到JSON中以帮助稍后可能需要更改文件的人员。

更新:正如RoToRa指出的那样,在JSON规范中技术上不允许使用注释(请参阅http://www.json.org的方便语法图)。然而,在Json.NET site功能表包括:

支持读,写评论

Newtonsoft.Json.JsonTextWriter.WriteComment(string)存在哪些不输出注释。我对创建评论的方式感兴趣,而不是直接使用JsonTextWriter

+0

@JamesNewtonKing是否有类似此类计划或可用的内容? – nikeee 2015-08-21 17:00:09

回答

5

的Json.NET JsonSerializer不序列化时自动输出评论。您需要手动编写您的JSON,如果您想要评论,请使用JsonTextWriter或LINQ to JSON

+5

@JamesNewtonKing我已经为最新的Json.NET写了一个小补丁,为'JsonProperty'(和'JsonPropertyAttribute')添加一个'Comment'属性。这个想法是,在'SerializeMemberInfo'期间,如果'Comment'不是null/empty,那么它会被写出JSON中的键/值对之上。在我继续完成之前,你会对此感兴趣吗? – 2012-03-01 08:25:31

+1

我会看看它,看看你是如何做到的,以及我是否认为这对别人有用 - http://json.codeplex.com/SourceControl/list/patches/upload – 2012-03-01 22:03:37

+1

@AdamRodger dole还有补丁吗?我无法在网上找到它。 – nikeee 2015-08-03 22:54:10

4

问题是作为文件格式的JSON不支持注释。你可以做的一件事 - 如果阅读JSON文件的应用程序允许它 - 则使用附加属性作为此问题中建议的注释:Can comments be used in JSON?

2

由于@RoToRa已经说过,JSON不允许注释。

如果你仍然想要评论,并且你想输出正确的JSON,你可以通过改变数据布局来让实际的JSON数据的注释部分。例如:

{ 
    "MyString": { 
     "doc": "My documentation string", 
     "value": "Test" 
    } 
}