2017-02-08 6 views
0

私は.NET 4.5アプリケーションを持っています。現在、私は、XMLファイルに出力されたリストを、書いています:以下のようにJsonConvertが私が探しているものを返さないリストにある

List<string[]> list = new List<string[]> { }; 

list.Add(new string[] { "text1", "this is text 1" }); 
list.Add(new string[] { "text2", "this is text 2" }); 
list.Add(new string[] { "text3", "this is text 3" }); 
list.Add(new string[] { "text4", "this is text 4" }); 

using (XmlWriter writer = XmlWriter.Create("output.xml")) 
{ 
    writer.WriteStartDocument(); 
    writer.WriteStartElement("texts"); 

    foreach (string[] item in list) 
    { 
     writer.WriteElementString(item[0], item[1]); 
    } 

    writer.WriteEndElement(); 
    writer.WriteEndDocument(); 
} 

これの出力が返されます。このリストにJsonConvert.SerializeObject()を実行

<?xml version="1.0" encoding="utf-8"?> 
<texts> 
    <text1>this is text 1</text1> 
    <text2>this is text 2</text2> 
    <text3>this is text 3</text3> 
    <text4>this is text 4</text4> 
</texts> 

は、次の値を返します。

[ 
    ["text1", "this is text 1"], 
    ["text2", "this is text 2"], 
    ["text3", "this is text 3"], 
    ["text4", "this is text 4"] 
] 

もちろん、これはそれほど有用ではありません。もっと便利なものは次のとおりです。

{ 
    "text1": "this is text 1", 
    "text2": "this is text 2", 
    "text3": "this is text 3", 
    "text4": "this is text 4" 
} 

これを行うにはどうすればよいでしょうか?

+0

エラーが発生するのは、C#で文字列配列のリストを作成することです。結果を得るには、 'text1、text2、... 'というプロパティを持つオブジェクトが必要です。そして、あなたはこのオブジェクトに対してJsonConvertを実行することができます。 – DomeTune

+0

配列を行として扱います。それは、常に列のカンマ区切りになります。あなたはその出力を得るために別の方法で行く必要があります。 – Aaron

答えて

3

最も簡単な方法:JsonConvert.SerializeObject(list.ToDictionary(p => p[0], p => p[1]))

それとも、独自のカスタムJsonConverter

UPD書くことができます。@Equalskは、このコードを指摘したように(カスタムコンバータなし)が唯一の文字列配列の最初の項目場合に動作します(テキスト1、テキスト2など)

+1

OPは、[0]配列文字列が一意である場合にのみ動作することに注意してください。 – Equalsk

0

リストの代わりに辞書を使用して結果を得ることができます。キーと値のペアのみを使用する場合は、辞書を使用します。より多くの場合は、タプルを使用することができます。それを包み込み、独自のカスタムコンバータを作成しない場合。

関連する問題