0

リストオブジェクト内に、オブジェクトの形式でいくつかのデータがあります。次に、このデータをJSONにシリアル化します。このために、私は(現在)JSON.NETを使用しています。私の問題は

JsonConvert.SerializeObject(list, ...)

全体をインデントするか、すべてのキー/値をインデントするか、まったくインデントしないかを選択できるようです。

{"Variable1":1,"Variable2":"2"},{"Variable1":1,"Variable2":"2"},...

or

{
    "Variable1": 1,
    "Variable2": "2"
},
{
    "Variable1": 1,
    "Variable2": "2"
},
...

これを取得したい:

{ "Variable1": 1, "Variable2": "2" },
{ "Variable1": 1, "Variable2": "2" },

ただし、すべてのキー/値を自分で明示的に記述する必要はありません(JsonTextWriterまたは手動)。リストを渡して上記を取得したいだけです。これはどういうわけか可能ですか?現時点では、リストを調べ、いくつかの置換、正規表現置換などを実行して、入力リストに応じて目的の出力を取得することにより、すべてのオブジェクトを個別にシリアル化しています。独自のシリアル化メソッドを作成せずに、これを行う簡単な方法はありますか?

4

1 に答える 1

0

こんにちは、特別なフォーマッタを開始するのに役立つものを見つけました。ここから JavaScript から C# に翻訳しました: https://github.com/umbrae/jsonlintdotcom/blob/master/c/js/jsl.format.js

空白なしでjson文字列に空白を追加します。このフォーマッタを自分のニーズに合わせて変更できると思います。

private static string PrettyPrinter_repeat(string s, int count) {
    string ns = "";

    for(int i = 0; i < count; i++) ns += s;
    return ns;
}

public static string PrettyPrinter(string json)
{
    int     i           = 0,
            il          = 0;

    string  tab         = "    ",
            newJson     = "";

    int     indentLevel = 0;
    bool    inString    = false;
    char    currentChar = default(char);


     for (i = 0, il = json.Length; i < il; i += 1) 
     {
        currentChar = json[i];

        switch (currentChar) {
        case '{': 
        case '[': 
            if (!inString) { 
                newJson += currentChar + "\n" + PrettyPrinter_repeat(tab, indentLevel + 1);
                indentLevel += 1; 
            } else { 
                newJson += currentChar; 
            }
            break; 
        case '}': 
        case ']': 
            if (!inString) { 
                indentLevel -= 1; 
                newJson += "\n" + PrettyPrinter_repeat(tab, indentLevel) + currentChar; 
            } else { 
                newJson += currentChar; 
            } 
            break; 

        case ',': 
            if (!inString) { 
                newJson += ",\n" + PrettyPrinter_repeat(tab, indentLevel); 
            } else { 
                newJson += currentChar; 
            } 
            break; 
        case ':': 
            if (!inString) { 
                newJson += ": "; 
            } else { 
                newJson += currentChar; 
            } 
            break; 
        case ' ':
        case '\n':
        case '\t':
            if (inString) {
                newJson += currentChar;
            }
            break;
        case '"': 
            if (i > 0 && json[i - 1] != '\\') {
                inString = !inString; 
            }
            newJson += currentChar; 
            break;
        default: 
            newJson += currentChar; 
            break;                    
        } 



     }

    return newJson; 


}
于 2012-09-24T23:02:22.223 に答える