Как можно указать protobuf-net, что свойство интерфейса должно быть десериализовано как определенный конкретный тип? - PullRequest
2 голосов
/ 24 мая 2011

У меня есть эта недвижимость:

public class SomeClass
{
  public ISomeInterface SomeProperty { get;set; }
}

Теперь ISomeInterface в данном конкретном контексте может быть только конкретным конкретным типом, например SomeClass2. Могу ли я сделать это без атрибута ProtoInclude?

Я думал, что смогу сделать что-то вроде этого:

model.Add(typeof(SomeClass), true).Add(1, "SomeProperty", typeof(SomeClass2));

Указывает, что SomeProperty всегда следует десериализовать как SomeClass2 (что, конечно, реализует интерфейс).

Но мне не удалось найти такой метод в модели.

1 Ответ

0 голосов
/ 24 мая 2011

Вы хотите проверить меня; p

Это не было открыто разоблачено;Google не разрешает мне коммитить, но как только я смогу зафиксировать, сработает следующее:

[Test]
public void ExposeInterfaceWithDefaultImplementation()
{
    var model = TypeModel.Create();
    // note the following sets for the ConstructType for the ISomeInferface, not specifically for Foo
    model.Add(typeof(ISomeInterface), false).Add("Foo").ConstructType = typeof(SomeClass2);
    model.Add(typeof(SomeClass), false).Add("SomeProperty");

    var orig = new SomeClass();
    orig.SomeProperty = new SomeClass2();
    orig.SomeProperty.Foo = 123;
    var clone = (SomeClass)model.DeepClone(orig);
    Assert.AreEqual(123, clone.SomeProperty.Foo);
}
...