2016-07-11 20 views
2

オブジェクトをシリアル化して.Net Core Configuration Binderで再水和できる方法はありますか?.NETコア構成のシリアル化

基本的に、私は、このテストに合格するために取得したいと思います:

[Test] 
public void Can_Serialize_And_Rehydrate() 
{ 
    var foo = new Foo{ Prop1 = 42; Prop2 = "Test" } 

    Dictionary<string, string> serialized = Serialize(Foo); 

    var deserializedFoo = new Foo(); 

    new ConfigurationBuilder() 
     .AddInMemoryCollection(serialized) 
     .Build() 
     .Bind(deserializedFoo); 

    Assert.AreEqual(deserializedFoo.Prop1, 42); 
    Assert.AreEqual(deserializedFoo.Prop2, "Test"); 
} 

は、シリアライザすぐにあるのか、私は自分のSerialize()メソッドを記述する必要がありますするつもりですしています?

+0

オプションと設定オブジェクトの使用については、 https://docs.asp.net/en/latest/fundamentals/configuration.html –

+0

@JoeAudette - 私はドキュメントを見てきました。はい。私はそこにオブジェクトを構成に変換することについては何も見ていませんが(私はこのテストのソースコードで見たことから、どこでもシリアライザを見たことはありません)。そして、はい、私がやろうとしているのはちょっと違法です。 –

答えて

0

私は「ハイジャック」JsonConfigurationProviderことで、この作業を取得することができたとシリアライズさ差し込みますJsonを直接その中に入れてください。これが最善の方法であるかどうかは分かりませんが、正しく動作するかどうかは分かりません。

public class ConfigurationSerializer 
{ 
    private class CustomJsonProvider : JsonConfigurationProvider 
    { 
     public CustomJsonProvider() : base(new JsonConfigurationSource()) 
     { 
     } 

     public IDictionary<string, string> GetData(Stream s) 
     { 
      Load(s); 
      // Return the Configuration Dictionary 
      return Data; 
     } 
    } 

    public Dictionary<string, string> Serialize(object o) 
    { 
     var serialized = 
      JsonConvert.SerializeObject(
       o, 
       new JsonSerializerSettings {NullValueHandling = NullValueHandling.Ignore}); 

     using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(serialized))) 
     { 
      var jsonProvider = new CustomJsonProvider(); 

      return jsonProvider 
       .GetData(ms) 
       .ToDictionary(key => key.Key, value => value.Value); 
     } 
    } 
} 
0

AddInMemoryCollectionの署名は以下のようなものですが、なぜここであなたの辞書をシリアル化しようとしていますか?あなたはそれをそのまま使うことができます。

public static IConfigurationBuilder AddInMemoryCollection(
      this IConfigurationBuilder configurationBuilder, 
      IEnumerable<KeyValuePair<string, string>> initialData) 

カスタム設定をテストする方法についての詳細を知りたい場合は、私はここで見てお勧めします: https://github.com/aspnet/Configuration/blob/1.0.0/test/Microsoft.Extensions.Configuration.Binder.Test/ConfigurationBinderTests.cs

+0

"なぜここで辞書をシリアライズしているのですか?" - 辞書を直列化しようとしているわけではありません。私は 'Foo'を辞書に直列化しようとしています。はい、これは少し非正統です:)。私は、ConfigKey構造体が型スキーマを構築するときにうまくいくので、ConfigurationBuilderを使ってメッセージパッシングシステム内の項目を直列化/逆直列化することを実験しています。 –

関連する問題