如何将其反序列化为原始类型? WebJobs SDK允许指定POCO对象的类型,并在其附近添加QueueTriggerAttribute
以使其起作用(the doc)。现在它反序列化不是原始类型,而是其他一些(从运行到运行它变化)。这是代码:
public class PocoCommandA { public string Prop { get; set; } }
public class PocoCommandB { public string Prop { get; set; } }
public static void Func1([QueueTrigger("myqueue")] PocoCommandA aCommand)
{... }
public static void Func2([QueueTrigger("myqueue")] PocoCommandB bCommand)
{ ... }
在
时调用Fun2
(或其他一些)
var a = new PocoCommandA();
var cloudQueueMessage = new CloudQueueMessage(JsonConvert.SerializeObject(a));
await queue.AddMessageAsync(cloudQueueMessage);
答案 0 :(得分:1)
如果PocoCommandA和PocoCommandB 2类具有相同的属性,则它不能 知道哪条消息属于特定对象。因为它可能是2个对象中的任何一个。通常,我们不建议2个类具有相同的属性。
如果PocoCommandA和PocoCommandB 2类具有不同的属性,那么如果我们将Poco消息发送到队列,则将触发相应的功能。我们不需要反序列化它。我们可以直接使用aCommand或bCommand。
答案 1 :(得分:0)
通过手动处理序列化/反序列化来修复。这需要使用switch
来完成消息的处理(当然可以是反射)。
反序列化:
var message = (IMessage) JsonConvert.DeserializeObject(msg,
new JsonSerializerSettings() {
TypeNameHandling = TypeNameHandling.Objects,
DateParseHandling = DateParseHandling.DateTimeOffset
} );
序列化:
new CloudQueueMessage(JsonConvert.SerializeObject(msg, /* the same */));