2017-07-10 27 views
1

是否有可能從protobuf-net得到更詳細的錯誤?是否有可能從protobuf-net獲得更詳細的錯誤

我發現Channelizer有什麼問題,但是這是一個很大的班級,我已經檢查了好幾次。

是否可以打開調試日誌或任何有助於發現問題的東西?

ProtoBuf.ProtoException: Unable to resolve sub-type of: AE.DataModel.IssueStore (Intelsat.AE.OperationalDataModel.Channelizer) ---> System.InvalidOperationException: Unable to resolve sub-type of: AE.DataModel.IssueStore 
    at ProtoBuf.Meta.MetaType.ApplyDefaultBehaviour() 
    at ProtoBuf.Meta.RuntimeTypeModel.FindOrAddAuto(Type type, Boolean demand, Boolean addWithContractOnly, Boolean addEvenIfAutoDisabled) 
    at ProtoBuf.Meta.MetaType.ApplyDefaultBehaviour() 
    at ProtoBuf.Meta.RuntimeTypeModel.FindOrAddAuto(Type type, Boolean demand, Boolean addWithContractOnly, Boolean addEvenIfAutoDisabled) 
    at ProtoBuf.Meta.MetaType.ApplyDefaultBehaviour() 
    at ProtoBuf.Meta.RuntimeTypeModel.FindOrAddAuto(Type type, Boolean demand, Boolean addWithContractOnly, Boolean addEvenIfAutoDisabled) 
    at ProtoBuf.Meta.RuntimeTypeModel.GetKey(Type type, Boolean demand, Boolean getBaseKey) 
    --- End of inner exception stack trace --- 
    at ProtoBuf.Meta.RuntimeTypeModel.GetKey(Type type, Boolean demand, Boolean getBaseKey) 
    at ProtoBuf.Meta.ValueMember.TryGetCoreSerializer(RuntimeTypeModel model, DataFormat dataFormat, Type type, WireType& defaultWireType, Boolean asReference, Boolean dynamicType, Boolean overwriteList, Boolean allowComplexTypes) 
    at ProtoBuf.Meta.ValueMember.BuildSerializer() 
    at ProtoBuf.Meta.MetaType.BuildSerializer() 
    at ProtoBuf.Meta.MetaType.get_Serializer() 
    at ProtoBuf.Meta.RuntimeTypeModel.Serialize(Int32 key, Object value, ProtoWriter dest) 
    at ProtoBuf.Meta.TypeModel.SerializeCore(ProtoWriter writer, Object value) 
    at ProtoBuf.Meta.TypeModel.Serialize(Stream dest, Object value, SerializationContext context) 
    at ProtoBuf.Serializer.Serialize[T](Stream destination, T instance) 
enter code here 

更新

[ProtoContract(ImplicitFields = ImplicitFields.AllPublic)] 
public class Channelizer : UniqueDataAccessBase, IChannelizer 
{ 
    public Channelizer() 
    { 
     this.ReceivePorts = new Dictionary<string, ChannelizerReceivePort>(); 
     this.TransmitPorts = new Dictionary<string, ChannelizerTransmitPort>(); 
     this.LimiterPowerMargins = new List<LimiterPowerMargin>(); 
    } 

    public Dictionary<string, ChannelizerReceivePort> ReceivePorts { get; set; } 

    public Dictionary<string, ChannelizerTransmitPort> TransmitPorts { get; set; } 

    public double InputPortPowerMaxWarning { get; set; } 

    public double InputPortPowerMaxError { get; set; } 

    public double OutputPortPowerMaxWarning { get; set; } 

    public double OutputPortPowerMaxError { get; set; } 

    public double MaxGain { get; set; } 

    public double SalcDeltaMarg { get; set; } 

    public double SalcRange { get; set; } 

    public double RefFrontEndlossAvg { get; set; } 

    public double RefBackEndlossAvg { get; set; } 

    public List<LimiterPowerMargin> LimiterPowerMargins { get; set; } 
} 

UniqueDataAccessBase

[ProtoContract(ImplicitFields = ImplicitFields.AllPublic)] 
[ProtoInclude(10000, "AE.OperationalDataModel.AdjacentCarrierCommon")] 
[ProtoInclude(10200, "AE.OperationalDataModel.AdjacentTransmitEarthStationAntenna")] 
[ProtoInclude(10300, "AE.OperationalDataModel.AdjacentConnectivityLink")] 
[ProtoInclude(10400, "AE.OperationalDataModel.Amplifier")] 
[ProtoInclude(10500, "AE.OperationalDataModel.AmplifierModel")] 
[ProtoInclude(10600, "AE.OperationalDataModel.Beam")] 
[ProtoInclude(10700, "AE.OperationalDataModel.Block")] 
[ProtoInclude(10800, "AE.OperationalDataModel.BlockLeg")] 
[ProtoInclude(10900, "AE.OperationalDataModel.Device")] 
[ProtoInclude(11000, "AE.OperationalDataModel.Carrier")] 
[ProtoInclude(11100, "AE.OperationalDataModel.CarrierDestination")] 
[ProtoInclude(11200, "AE.OperationalDataModel.CarrierDownlink")] 
[ProtoInclude(11300, "AE.OperationalDataModel.Network")] 
[ProtoInclude(11400, "AE.OperationalDataModel.Channelizer")] 
[ProtoInclude(11500, "AE.OperationalDataModel.Connection")] 
[ProtoInclude(11600, "AE.OperationalDataModel.ConnectivityLink")] 
[ProtoInclude(11700, "AE.OperationalDataModel.EarthStationAntenna")] 
[ProtoInclude(11800, "AE.OperationalDataModel.EarthStationAntenna")] 
[ProtoInclude(11900, "AE.OperationalDataModel.PayloadChain")] 
[ProtoInclude(12000, "AE.OperationalDataModel.Satellite")] 
[ProtoInclude(12200, "AE.OperationalDataModel.SubChannel")] 
[ProtoInclude(12300, "AE.OperationalDataModel.Switch")] 
[ProtoInclude(12400, "AE.OperationalDataModel.TransmissionParameter")] 
[ProtoInclude(12500, "AE.OperationalDataModel.Channel")] 
[ProtoInclude(12600, "AE.OperationalDataModel.ChannelizerPort")] 
public class UniqueDataAccessBase : IssueStore, IUniqueDataAccessBase 
{ 
    public UniqueDataAccessBase() 
     : this("Id") 
    { 
    } 

    public UniqueDataAccessBase(string idPropName) 
    { 
     this.Id = Constants.NullString; 
     this.IdPropertyName = idPropName; 
    } 

    public DatabaseCompletion DatabaseCompletionMethod { get; set; } 

    public string Id { get; set; } // tdb_amp_id 

    public string IdPropertyName { get; set; } 
} 

ChannelizerReceivePort

[ProtoContract(ImplicitFields = ImplicitFields.AllPublic)] 
public class ChannelizerReceivePort : ChannelizerPort 
{ 
    public ChannelizerReceivePort() 
    { 
     this.Channels = new List<ReceiveChannel>(); 
     this.Measurements = new List<ChannelizerReceivePortMeasurement>(); 
    } 

    public List<ReceiveChannel> Channels { get; set; } 

    public List<ChannelizerReceivePortMeasurement> Measurements { get; set; } 
} 

ChannelizerPort

[ProtoContract] 
[ProtoInclude(100, typeof(ChannelizerReceivePort))] 
[ProtoInclude(200, typeof(ChannelizerTransmitPort))] 
public abstract class ChannelizerPort : UniqueDataAccessBase, IChannelizerPort 
{ 
} 

UniqueDataAccessBase

[ProtoContract(ImplicitFields = ImplicitFields.AllPublic)] 
[ProtoInclude(10000, "AE.OperationalDataModel.AdjacentCarrierCommon")] 
[ProtoInclude(10200, "AE.OperationalDataModel.AdjacentTransmitEarthStationAntenna")] 
[ProtoInclude(10300, "AE.OperationalDataModel.AdjacentConnectivityLink")] 
[ProtoInclude(10400, "AE.OperationalDataModel.Amplifier")] 
[ProtoInclude(10500, "AE.OperationalDataModel.AmplifierModel")] 
[ProtoInclude(10600, "AE.OperationalDataModel.Beam")] 
[ProtoInclude(10700, "AE.OperationalDataModel.Block")] 
[ProtoInclude(10800, "AE.OperationalDataModel.BlockLeg")] 
[ProtoInclude(10900, "AE.OperationalDataModel.Device")] 
[ProtoInclude(11000, "AE.OperationalDataModel.Carrier")] 
[ProtoInclude(11100, "AE.OperationalDataModel.CarrierDestination")] 
[ProtoInclude(11200, "AE.OperationalDataModel.CarrierDownlink")] 
[ProtoInclude(11300, "AE.OperationalDataModel.Network")] 
[ProtoInclude(11400, "AE.OperationalDataModel.Channelizer")] 
[ProtoInclude(11500, "AE.OperationalDataModel.Connection")] 
[ProtoInclude(11600, "AE.OperationalDataModel.ConnectivityLink")] 
[ProtoInclude(11700, "AE.OperationalDataModel.EarthStationAntenna")] 
[ProtoInclude(11800, "AE.OperationalDataModel.EarthStationAntenna")] 
[ProtoInclude(11900, "AE.OperationalDataModel.PayloadChain")] 
[ProtoInclude(12000, "AE.OperationalDataModel.Satellite")] 
[ProtoInclude(12200, "AE.OperationalDataModel.SubChannel")] 
[ProtoInclude(12300, "AE.OperationalDataModel.Switch")] 
[ProtoInclude(12400, "AE.OperationalDataModel.TransmissionParameter")] 
[ProtoInclude(12500, "AE.OperationalDataModel.Channel")] 
[ProtoInclude(12600, "AE.OperationalDataModel.ChannelizerPort")] 
public class UniqueDataAccessBase : IssueStore, IUniqueDataAccessBase 
{ 
    public UniqueDataAccessBase() 
     : this("Id") 
    { 
    } 

    public UniqueDataAccessBase(string idPropName) 
    { 
     this.Id = Constants.NullString; 
     this.IdPropertyName = idPropName; 
    } 

    public DatabaseCompletion DatabaseCompletionMethod { get; set; } 

    public string Id { get; set; } 

    public string IdPropertyName { get; set; } 
} 

IssueStore

[ProtoContract(ImplicitFields = ImplicitFields.AllPublic)] 
[ProtoInclude(10100, "AE.DataModel.DataAccessBase")] 
[ProtoInclude(10200, "AE.Common.Model.UniqueDataAccessBase")] 
[ProtoInclude(10400, "AE.Common.Model.UniqueDataAccessBase")] 
[ProtoInclude(10500, "AE.OperationalDataModel.BeamBwSegment")] 
[ProtoInclude(10600, "AE.OperationalDataModel.FrequencyRange")] 
public class IssueStore : IIssueStore, IStateChecker 
{ 
    public IssueStore() 
    { 
     this.Issues = new List<Error>(); 
    } 

    public List<Error> Issues { get; set; } 
} 

這裏的全貌

enter image description here

+1

您可以通過執行'ProtoBuf.Meta.RuntimeTypeModel.Default.GetSchema(typeof(Channelizer)))'來查看爲您的類型生成的模式,或許您會發現問題。 Protobuf-net並沒有實現調試跟蹤,正如[here](https://stackoverflow.com/a/29674382/3744182)所述。 – dbc

+1

這意味着[ProtoInclude]指定了一些找不到的東西。有沒有我可以在這裏看到的代碼? –

+0

@MarcGravell請看看已更新的問題 – GSerjo

回答

0

由於@MarcGravell在註釋中說:「如果你不使用typeof,那麼你需要使用組合y限定名稱(AQN,類型可用)。「

所以,儘量使用

  1. typeof,如果沒有可能goto 2

  2. 使用裝配合格的名稱,你可以從typeof(int).Type

BTW得到它:可以肯定,你正在使用最新版本。 protobuf-net 2.3.0是一個調試友好的版本

相關問題