2

ここに投稿されたすべてのソリューションを調べて試しましたが、役に立ちませんでした。

私の問題は次のとおりです。

  • Web ソリューション (ASP.NET MVC 3 C# / Razor) では、Json.Net を使用して一部のレポートに表示されるデータをシリアル化し、WPF アプリケーションに送信できるようにしています。これらのレポートの結果は、Model オブジェクトのコレクションです。

  • 私は WPF アプリケーションに同じモデル オブジェクトを持っているので、Json 文字列を逆シリアル化するときに、それに応じて結果をバインドしたいと思います (元のモデル オブジェクトを保持します)。

  • アセンブリ名とオブジェクト型は、両端 (Web / アプリ) で異なります - 異なる名前空間です。

これが私がこれまでに試したことです:

Web ソリューション:

// MyModel
public class MyModel
{
    public long Id { get; set; }
    public string Name { get; set; }
}

...

// data = IEnumerable<MyModel>
var jsonData = JsonConvert.SerializeObject(data.ToArray(), data.ToArray().GetType(), 
    new JsonSerializerSettings 
    { 
        TypeNameHandling = TypeNameHandling.All
    });

アプリで:

// MyModel
public class MyModel
{
    [JsonProperty("Id")]
    public long Id { get; set; }
    [JsonProperty("Name")]            
    public string Name { get; set; }
}

...

var jsonArray = JsonConvert.DeserializeObject(e.jsonObject,
    null,
    new JsonSerializerSettings
        {
            TypeNameHandling = TypeNameHandling.All,
            Binder = new MySerializationBinder()
        });

...

public class MySerializationBinder : DefaultSerializationBinder
{
    public override Type BindToType(string assemblyName, string typeName)
    {
        return typeof(MyModel);
    }
}

誰か私に手を貸してくれませんか?

ありがとう!

アップデート

@Marc Gravellのコメントによると:

ここで主な問題について言及するのを忘れていました。オブジェクト型を WPF アプリに送信する必要があります。これは、リスナーがさまざまなモデルのコレクションである多くのレポートからのデータを期待するためです。したがって、それをバインドするときに、どのオブジェクトをバインドする必要があるかがわかります。

4

1 に答える 1