2016-12-02 9 views
1

私はTableDTOという名前のオブジェクトのコレクションをシリアル化しようとしています。このオブジェクトには、Name、Date、List>が含まれています。 C#でNewtonsoft.Jsonライブラリを使用してシリアル化しようとしています。<keyvaluepair <string、string >>というリストを含むオブジェクトをJsonに適切にシリアル化するにはどうすればいいですか?

オブジェクトを構築するとすべてのことがうまく動作します。そして、私はその後、私はこの
JsonConvert.SerializeObject(TableDto)のように、私のオブジェクトをシリアル化TableDTO.List = mylistという

私TableDTOにリストを追加
mylist.Add(new KeyValuePair<string, string>($"Col{compteur}", value.Value));
;:私はこのようなKeyValuePairを追加します

そして、ここで私は私が代わりにリストがこの

{ 
    {"Key" : "Col1","Value" : "value"}, 
    {"Key" : "Col2","Value" : "value"} 
} 

のようにシリアライズされ

{ 
    {"Col1":"value"}, 
    {"Col2":"value"} 
} 

を持つの それをシリアライズするとき、私は遭遇した問題がある

{ "FileName" : "MEP_3_10$3aList.xlsx", "Conditions" :{"Predicate" : "<select a condition>"}, "DataRows" : [{"Key" : "Col1","Value" : "value"}, {"Key" : "Col2","Value" : "value"}] }

得たものです私は、stackoverflowの他のポストに記載されているようにコンバータを使用しようとしましたが、リストが私のオブジェクトのプロパティであることは容易ではありません。あなたの助けのための

どうもありがとう

+2

あなたのコードの多くを共有してくださいことはできますか?私は最近あなたがここでやろうとしているのと全く同じことをしました。 –

+0

ご希望のJSONが無効です。 http://jsonlint.com/にアップロードすると、エラー:1行目のエラー:解析エラー: {\t {\t \t "Col1": "value" 'と表示されます。 [json標準](http://www.json.org/)では、中括弧 '{...} 'で囲まれたコンテナは名前と値の組の順序のないセットですが、外側のコンテナにはプロパティ名がありません。 – dbc

答えて

1

では、発生する問題がある:NewtonSoft JSONは、辞書のキーの値と構造体を処理することができません。

は私のコードを点検してください:

public class CustomJSONSerializationHelper 
{ 
    public string CustomSerialize(Dictionary<AuthorizationKey, ConditionalActionFlags> actionFlagMappings) 
    { 
     // ToArray() and use custom convertors, because NewtonSoft JSON can't handle dictionary key values and struct. 
     var jsonString = JsonConvert.SerializeObject(actionFlagMappings.ToArray(), new Newtonsoft.Json.Converters.StringEnumConverter(), new AuthorizationKeyJsonConverter()); 
     return jsonString; 
    } 

    public Dictionary<AuthorizationKey, ConditionalActionFlags> CustomDeserialize(string jsonActionFlagMappings) 
    { 
     var resultArray = CustomDeserializeOverLoad(jsonActionFlagMappings); 
     return (resultArray != null) ? resultArray.ToList().ToDictionary(pair => pair.Key, pair => pair.Value) : null; 
    } 

    public KeyValuePair<AuthorizationKey, ConditionalActionFlags>[] CustomDeserializeOverLoad(string jsonActionFlagMappings) 
    { 
     var result = JsonConvert.DeserializeObject<KeyValuePair<AuthorizationKey, ConditionalActionFlags>[]>(jsonActionFlagMappings, 
      new Newtonsoft.Json.Converters.StringEnumConverter(), new AuthorizationKeyJsonConverter()); 
     return result; 
    } 
} 

私はこのようにそれを呼び出す:

private string ObjectToJSON(Dictionary<AuthorizationKey, ConditionalActionFlags> actionFlagsMapping) 
    { 
     CustomJSONSerializationHelper customSerializationHelper = new CustomJSONSerializationHelper(); 
     return customSerializationHelper.CustomSerialize(actionFlagsMapping); 
    } 
+0

辞書に問題があります。私はさらに構造体を直列化しなければならなかった。私のコードには、AuthorizationKeyJsonConverterというクラスが追加されています。あなたはこれを必要とせず、ディクショナリ用の修正プログラムのみを使用します。 –

+0

自分の状況で自分のコードを使用できましたか?私にお知らせください。そうでない場合は、あなたのコードを共有してください。今日後で私はそれを見ていきます。 –

+0

残念ながら私はそれを理解することができませんし、それを使用する方法 –

関連する問題