Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Serialization 在消息中检测到不匹配的组标记-protobuf net_Serialization_Protobuf Net - Fatal编程技术网

Serialization 在消息中检测到不匹配的组标记-protobuf net

Serialization 在消息中检测到不匹配的组标记-protobuf net,serialization,protobuf-net,Serialization,Protobuf Net,我对Silverlight很陌生。我正在为一个主要依赖于序列化和反序列化的项目工作 以前,对于WPF,我很熟悉可序列化类。对于silverlight,我发现protobuf非常有用。但是,我为这个例外感到困扰。我不知道是什么导致了这个问题。请帮帮我 我正在使用Silverlight 3.0。 协议网络r282 请找到我正在使用的代码 [ProtoContract] public class Report { public Report() { } [ProtoM

我对Silverlight很陌生。我正在为一个主要依赖于序列化和反序列化的项目工作

以前,对于WPF,我很熟悉可序列化类。对于silverlight,我发现protobuf非常有用。但是,我为这个例外感到困扰。我不知道是什么导致了这个问题。请帮帮我

我正在使用Silverlight 3.0。 协议网络r282

请找到我正在使用的代码

[ProtoContract]
public class Report
{
    public Report()
    {
    }

    [ProtoMember(1)]
    public SubReports SubReports { get; set; }
}

[ProtoContract]
public class SubReports
   : List<SubReport>
{
    public SubReports()
    {
    }

    [ProtoMember(1)]
    public SubReport SubReport { get; set; }
}

[ProtoContract]
public class SubReport
{
    public SubReport()
    {
    }

    [ProtoMember(1)]
    public string Name { get; set; }
}
提前感谢。
Vinodh

(注意:我无法复制“组标签”问题;请参阅编辑历史,了解我对此的最初想法,现已删除;如果您能帮助我复制此内容,我将不胜感激)

问题是
子报表
。您已经将其定义为列表和序列化实体(
[ProtoContract]
);后者优先,因此它试图序列化列表上的单个子报表(总是
null
?)

如果将此更改为:

// note no attributes, no child property
public class SubReports : List<SubReport> { }
显示blob:

0A040A0251310A040A025132A040A0251030A040A0251344

(注意:我无法复制“组标签”问题;请参阅编辑历史,了解我对此的最初想法,现已删除;如果您能帮助我复制此问题,我将不胜感激)

问题是
子报表
。您已经将其定义为列表和序列化实体(
[ProtoContract]
);后者优先,因此它试图序列化列表上的单个子报表(总是
null
?)

如果将此更改为:

// note no attributes, no child property
public class SubReports : List<SubReport> { }
显示blob:

0A040A0251310A040A025132A040A0251030A040A0251344


非常感谢马克的迅速回复。我会调查的。嗨,马克,你上次的回答本身就解决了我的问题。实际上,我正在尝试反序列化一个xml文件并填充类,就像我们在桌面应用程序中使用的[Serializable]一样。是的,通过使用上述建议,我在“子报告”中得到了“null”。谢谢更新:)非常感谢marc的快速回复。我会调查的。嗨,马克,你上次的回答本身就解决了我的问题。实际上,我正在尝试反序列化一个xml文件并填充类,就像我们在桌面应用程序中使用的[Serializable]一样。是的,通过使用上述建议,我在“子报告”中得到了“null”。感谢您的更新:)
// note no attributes, no child property
public class SubReports : List<SubReport> { }
static void Main() {
    byte[] blob;
    // store a report
    using (MemoryStream ms = new MemoryStream()) {
        Report report = new Report {
            SubReports = new List<SubReport> {
                new SubReport { Name="Q1"}, 
                new SubReport { Name="Q2"},
                new SubReport { Name="Q3"},
                new SubReport { Name="Q4"},
            }
        };

        Serializer.Serialize(ms, report);
        blob = ms.ToArray();
    }
    // show the hex
    foreach (byte b in blob) { Console.Write(b.ToString("X2")); }
    Console.WriteLine();

    // reload it
    using (MemoryStream ms = new MemoryStream(blob)) {
        Report report = Serializer.Deserialize<Report>(ms);
        foreach (SubReport sub in report.SubReports) {
            Console.WriteLine(sub.Name);
        }
    }
}