Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.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
C# 反序列化派生类型会导致“0”;“期望元素”;错误_C#_Servicebus_Brokeredmessage - Fatal编程技术网

C# 反序列化派生类型会导致“0”;“期望元素”;错误

C# 反序列化派生类型会导致“0”;“期望元素”;错误,c#,servicebus,brokeredmessage,C#,Servicebus,Brokeredmessage,我尝试使用微软的Serivce总线代理消息API,在尝试使用派生类型时遇到反序列化问题。代码似乎无法识别已知类型,在序列化这些类型并在其他服务之间返回它们时,我没有任何问题。有什么我遗漏的吗?我已经浏览了很多这样的帖子,但似乎没有任何效果 以下是消息结构: [DataContract] [KnownType(typeof(ActivityBus))] public class BaseBusType { [DataMember] public int Id { get; set;

我尝试使用微软的Serivce总线代理消息API,在尝试使用派生类型时遇到反序列化问题。代码似乎无法识别已知类型,在序列化这些类型并在其他服务之间返回它们时,我没有任何问题。有什么我遗漏的吗?我已经浏览了很多这样的帖子,但似乎没有任何效果

以下是消息结构:

[DataContract]
[KnownType(typeof(ActivityBus))]
public class BaseBusType
{
    [DataMember]
    public int Id { get; set; }
}

[DataContract]
public class ActivityBus : BaseBusType { }
到目前为止,我已经尝试了以下选项:

// In the sending function
var brokeredMessage = new BrokeredMessage(reader.ReadToEnd());
topicClient.Send(obj);

// In the receiving function
List<Type> knownTypes = new List<Type>() { typeof(ActivityBus) };
var serializer = new DataContractSerializer(typeof(BaseBusType), knownTypes); // listed knowntypes for brevity
var messageBody = message.GetBody<BaseBusType>(serializer);
//在发送函数中
var brokeredMessage=新的brokeredMessage(reader.ReadToEnd());
topicClient.Send(obj);
//在接收功能中
List knownTypes=新列表(){typeof(ActivityBus)};
var serializer=新的DataContractSerializer(typeof(baseBustType),knownTypes);//为简洁起见,列出了knowntypes
var messageBody=message.GetBody(序列化程序);
此外:

//在发送函数中
使用(MemoryStream MemoryStream=new MemoryStream())
使用(StreamReader=新StreamReader(memoryStream))
{
DataContractSerializer serializer=新的DataContractSerializer(typeof(T));
serializer.WriteObject(memoryStream,data);
memoryStream.Position=0;
var brokeredMessage=新的brokeredMessage(reader.ReadToEnd());
topicClient.Send(代理消息);
}
//在接收功能中
使用(Stream=newmemoryStream())
{
var str=brokeredMessage.GetBody();
byte[]data=System.Text.Encoding.UTF8.GetBytes(str);
stream.Write(数据,0,数据长度);
流位置=0;
List knownTypes=新列表(){typeof(Activitybus)};
var反序列化器=新的DataContractSerializer(typeof(baseBustType),knownTypes);
var reader=XmlReader.Create(newstringreader(str));
var obj=反序列化器.ReadObject(读卡器);
返回(T)obj;
}
// In the sending function
using (MemoryStream memoryStream = new MemoryStream())
using (StreamReader reader = new StreamReader(memoryStream))
{
    DataContractSerializer serializer = new DataContractSerializer(typeof(T));
    serializer.WriteObject(memoryStream, data);
    memoryStream.Position = 0;

    var brokeredMessage = new BrokeredMessage(reader.ReadToEnd());
    topicClient.Send(brokeredMessage);
}

// In the receiving function
using (Stream stream = new MemoryStream())
{
    var str = brokeredMessage.GetBody<string>();

    byte[] data = System.Text.Encoding.UTF8.GetBytes(str);
    stream.Write(data, 0, data.Length);
    stream.Position = 0;
    List<Type> knownTypes = new List<Type>() { typeof(Activitybus) };
    var deserializer = new DataContractSerializer(typeof(BaseBusType), knownTypes);
    var reader = XmlReader.Create(new StringReader(str));
    var obj = deserializer.ReadObject(reader);
    return (T)obj;
}