I POCO haben, die so einfach ist, wieJson nicht alle Objekte in Azure Serialisierung
public partial class Member
{
public int ID { get; set; }
[Required]
[StringLength(100)]
public string MemberId { get; set; }
public DateTime CreatedOn { get; set; }
[Required]
[StringLength(100)]
public string FirstName { get; set; }}
und ein Add-Befehl, wie diese
public class AddMemberCommand : ICommand
{
public AddMemberCommand(Member member )
{
ID = Guid.NewGuid();
MemberData = member;
}
public Member MemberData { get; private set; }
public Guid ID { get; }
public string CommandName
{
get { return "AddMemberCommand"; }
}
}
sieht, die von
erbtpublic interface ICommand
{
/// <summary>
/// Gets the command identifier.
/// </summary>
Guid ID { get; }
string CommandName { get; }
}
Jetzt sende ich diesen Code an eine Methode, die Newton Jsons Serialisierungs-Einstellungsklasse mit einigen Parametern initialisiert ein Objekt drehen Der Serialisierer sieht wie folgt
public class JsonTextSerializer
{
private readonly JsonSerializer _serializer;
public JsonTextSerializer()
{
_serializer = JsonSerializer.Create(new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.All,
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
TypeNameAssemblyFormat = FormatterAssemblyStyle.Simple
});
}
public void Serialize(TextWriter writer, object graph)
{
var jsonWriter = new JsonTextWriter(writer);
jsonWriter.Formatting = Formatting.Indented;
_serializer.Serialize(jsonWriter, graph);
writer.Flush();
}
public object Deserialize(TextReader reader)
{
var jsonReader = new JsonTextReader(reader);
try
{
return this._serializer.Deserialize(jsonReader);
}
catch (JsonSerializationException e)
{
// Wrap in a standard .NET exception.
throw new SerializationException(e.Message, e);
}
}
}
Der Serialisierer verwendet wird, um den Befehl in einer Nutzlast für die vermittelte Nachricht zu konvertieren, wie unten
private BrokeredMessage CreateMessage(POCOS.Member member)
{
var serializer = new JsonTextSerializer();
var command = new AddMemberCommand(member);
var stream = new MemoryStream();
var writer = new StreamWriter(stream);
serializer.Serialize(writer, command);
stream.Position = 0;
BrokeredMessage message = new BrokeredMessage(stream, true);
return message;
}
und es gibt ein weiteres Verfahren dargestellt, welches das Verfahren erhält
private POCOS.Member GetPocoFromMessage(BrokeredMessage message)
{
ITextSerializer serializer = new JsonTextSerializer();
AddMemberCommand command;
using (var stream = message.GetBody<Stream>())
{
using (var reader = new StreamReader(stream))
{
var payload = serializer.Deserialize(reader);
command = payload as AddMemberCommand;
}
}
return command.MemberData;
}
Das Problem besteht in der Deserialisierung einiger Eigenschaften (ID, CommandName) werden mit Ausnahme von MemberData gefüllt, was null ist. Ich kann den Strom lesen (indem ich eine reader.ReadToEnd()) und sehen, es wurde über die Leitung übertragen, aber Json kann nicht alle sein Objekt deserialize Auf einmal dachte ich auch, es vielleicht nur Felder in der Schnittstelle, aber das ist nicht der Fall