1

非表示のフィールドを持つ型を使用すると、「メンバーを特定できません」という例外が発生します (属性のない RuntimeTypeModel 経由の V2)。

MetaType.cs のこの行で長さチェックを削除すると、この特別な使用例の問題が解決されます。

 if(members != null && members.Length == 1) mi = members[0];

しかし、長さのチェックには理由があるのではないかと心配しているので、単純に削除するだけでは十分な解決策ではないかもしれません. members[0]この場合、非表示の基底クラス メンバーが配列の最後に配置されるため、使用は機能します。

私のユースケースの簡略化された例:

public class SharedType
{
    public int Number { get; set; }
}

public class ClientType : SharedType
{
    public new long Number { get; set; }
}

var modelServer = RuntimeTypeModel.Create();
modelServer.Add(typeof(SharedType), false).Add("Number");

var ms = new MemoryStream();
modelServer.Serialize(ms, new SharedType() { Number = 10 });

var modelClient = RuntimeTypeModel.Create();
modelClient.Add(typeof(ClientType), false).Add("Number");

ClientType obj = (ClientType)modelClient.Deserialize(new MemoryStream(ms.ToArray()), null, typeof(ClientType));

実際にはint、SharedNestedType とlongClientNestedType に置き換えます。

4

0 に答える 0