【问题标题】:Creating MTOM and Deserializing it创建 MTOM 并对其进行反序列化
【发布时间】:2012-05-20 01:01:11
【问题描述】:

我一直在使用 MSDN 中的代码创建 MTOM。

似乎有一个错误,我不明白问题出在哪里,因为论坛上的一位用户指出有一个错误。

文件 (JPEG) 数据在反序列化后损坏。下面列出了完整的代码。

 public class Post_7cb0ff86_5fe1_4266_afac_bcb91eaca5ec
            {
                [DataContract()]
                public partial class TestAttachment
                {
                    private byte[] fileField;
                    private string filenameField;

                    [DataMember()]
                    public byte[] File
                    {
                        get
                        {
                            return this.fileField;
                        }
                        set
                        {
                            this.fileField = value;
                        }
                    }
                    [DataMember()]
                    public string Filename
                    {
                        get
                        {
                            return this.filenameField;
                        }
                        set
                        {
                            this.filenameField = value;
                        }
                    }
                }
                public static void Test()
                {
                    string Filename = "Image.jpg";
                byte[] file = File.ReadAllBytes(Filename);

                TestAttachment Attachment = new TestAttachment();
                Attachment.Filename = Filename;
                Attachment.File = file;
                MemoryStream MTOMInMemory = new MemoryStream();
                XmlDictionaryWriter TW = XmlDictionaryWriter.CreateMtomWriter(MTOMInMemory, Encoding.UTF8, Int32.MaxValue, "");
                DataContractSerializer DCS = new DataContractSerializer(Attachment.GetType());
                DCS.WriteObject(TW, Attachment);
                TW.Flush();
                Console.WriteLine(Encoding.UTF8.GetString(MTOMInMemory.ToArray()));
                var v = DeserializeMTOMMessage(Encoding.UTF8.GetString(MTOMInMemory.ToArray()));
                File.WriteAllBytes(v.Filename,v.File);
                }

                public static TestAttachment DeserializeMTOMMessage(string MTOMMessage)
                {

                    try
                    {

                        MemoryStream MTOMMessageInMemory = new MemoryStream(UTF8Encoding.UTF8.GetBytes(MTOMMessage));

                        XmlDictionaryReader TR = XmlDictionaryReader.CreateMtomReader(MTOMMessageInMemory, Encoding.UTF8, XmlDictionaryReaderQuotas.Max);

                        DataContractSerializer DCS = new DataContractSerializer(typeof(TestAttachment));

                        return (TestAttachment)DCS.ReadObject(TR);

                    }
                    catch
                    {

                        return null;

                    }

                }
            }

如果有人能帮助我指出问题所在,我将不胜感激。我是 XOP/MTOM 的新手,很难找出错误可能出在哪里。序列化或反序列化。

谢谢

【问题讨论】:

  • 您收到的确切错误是什么?
  • MIME 内容类型不正确。嗯,现在不记得实际的话。但告诉我 mime 内容类型无效。
  • 似乎 MIME 内容类型不可序列化。试试this,如果可行,我会将其添加为答案。
  • 哎呀...很抱歉。我误导了你和我自己。我在 MTOM 上提出了另一个问题,尽管我正在回答这个问题。实际问题在于反序列化。反序列化后数据损坏,能否运行代码自己查看??

标签: c# serialization deserialization mtom xop


【解决方案1】:

您的代码中存在错误。 改变你的方法调用

MTOMInMemory.Position = 0;
DeserializeMTOMMessage(Encoding.UTF8.GetString(MTOMInMemory.ToArray()));

DeserializeMTOMMessage(MTOMInMemory.ToArray())

以及实现

 public static TestAttachment DeserializeMTOMMessage(byte[] MTOMMessage) 
    { 
        try 
        { 
            MemoryStream MTOMMessageInMemory = new MemoryStream(MTOMMessage);
            XmlDictionaryReader TR = XmlDictionaryReader.CreateMtomReader(MTOMMessageInMemory, Encoding.UTF8, XmlDictionaryReaderQuotas.Max); 
            DataContractSerializer DCS = new DataContractSerializer(typeof(TestAttachment)); 
            return (TestAttachment)DCS.ReadObject(TR); 
        } 
        catch
        {

            return null;
        } 
    } 

您所做的是从 utf8 到字节数组的双重转换,反之亦然,最终创建的不是您使用的原始字节数组

【讨论】:

    猜你喜欢
    • 2017-02-28
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    相关资源
    最近更新 更多