1

次のように、(ASP.NET 4.0 で) memorystream を使用して ICS カレンダー ファイルを作成しようとしています。

using System.IO;
using System;

public MemoryStream GetMemoryStream()
{
    iCalendar iCal = new iCalendar();
    Event evt = iCal.Create<Event>();

    // Set information about the event
    evt.Start = new iCalDateTime(SomeStartTime);
    evt.End = new iCalDateTime(SomeEndTime);
    evt.Location = SomeLocation;
    evt.Description = SomeDescription;
    evt.Summary = SomeSummary;

    iCalendarSerializer serializer = new iCalendarSerializer(iCal);
    MemoryStream ms = new MemoryStream();
    serializer.Serialize(iCal, ms, Encoding.UTF8);
    return ms;
}

私は何かが欠けていると思います。そこから正しいMemoryStreamオブジェクトを作成するのを手伝ってくれる人はいますか?

注: forMemorySteamを作成するには、そのオブジェクトが必要です。System.Net.Mail.AttachmentSystem.Net.Mail.MailMessage

4

1 に答える 1

3

私が見る限り、MemoryStream はシリアライザーによって破棄されています。カレンダーを文字列に変換してから、文字列を MemoryStream に変換することで回避しました

using System.IO;
using System;

public MemoryStream GetMemoryStream()
{
    iCalendar iCal = new iCalendar();
    Event evt = iCal.Create<Event>();

    // Set information about the event
    evt.Start = new iCalDateTime(SomeStartTime);
    evt.End = new iCalDateTime(SomeEndTime);
    evt.Location = SomeLocation;
    evt.Description = SomeDescription;
    evt.Summary = SomeSummary;

    iCalendarSerializer serializer = new iCalendarSerializer(iCal);
    MemoryStream ms = new MemoryStream();
    //serializer.Serialize(iCal, ms, Encoding.UTF8);
    var ics = serializer.SerializeToString(iCal);
    var bytes = System.Text.Encoding.UTF8.GetBytes(ics);
    ms.Write(bytes, 0, bytes.Length); 
    ms.Seek(0, SeekOrigin.Begin);
    return ms;
}
于 2012-11-26T22:18:11.537 に答える