0

次のようなJson文字列があります。

{
   EventID: 4,
   CalendarEntry : 
   {
      CalendarID: 4,
      AreaID: 41,
      Name: "My Event Entry #4"
   }
}

トップレベル構造をコード内のイベントエンティティに逆シリアル化します。これにより、Idに(4)が正しく追加されます。

public class Event
{
    [DataMember(Name = "EventID")]
    public int Id { get; set; }
}

ただし、カレンダーをプロパティとしてイベントに追加すると、2つのIDは常にnullを返しますか?

public class EventCalendar
{
    [DataMember(Name = "CalendarID")]
    public int Id { get; set; }

    [DataMember(Name = "AreaID")]
    public int AreaId { get; set; }

    [DataMember(Name = "Name")]
    public string Name { get; set; }
}

public class Event
{
    [DataMember(Name = "EventID")]
    public int Id { get; set; }

    [DataMember(Name = "CalendarEntry")]
    public EventCalendar Calendar { get; set; }
}

私の悩みの種は、IdまたはAreaIdのいずれかから[DataMember]属性を削除し、JSON文字列から取得した名前とまったく同じ名前を付けると、正しい結果が返されることです。ただし、エンティティで同じ名前を使用したくないので、[DataMember]がデータを正しく戻すことを期待していましたか?

.Net4.5でJsonSerializerを使用しています。

Newtonsoft.Jsonでもこれを試しましたが、同じことをしますか?

4

2 に答える 2

0

これは私にとってはうまくいきます。入力 JSON 文字列が有効であることを確認します。この例では、私は使用System.Web.Script.Serializationして いますSystem.Runtime.Serialization

public static void Main (string[] args)
{
        JavaScriptSerializer ser = new JavaScriptSerializer();          
        string json = ser.Serialize(new Event { 
            Id =  4,
            Calendar = new EventCalendar {
                Id = 5,
                AreaId = 55,
                Name = "Some name"
            }
        });

        Console.WriteLine(string.Format("json  = {0}", json));
        Event fromJsonEvent = ser.Deserialize<Event>(json);

        Console.WriteLine(string.Format ("Event.Id = {0}", fromJsonEvent.Id));
        Console.WriteLine(string.Format ("Event.EventCalendar.Name = {0}", fromJsonEvent.Calendar.Name));
        Console.WriteLine(string.Format ("Event.EventCalendar.Id = {0}", fromJsonEvent.Calendar.Id));
    }
}

public class EventCalendar
{
    [DataMember(Name = "CalendarID")]
    public int Id { get; set; }

    [DataMember(Name = "AreaID")]
    public int AreaId { get; set; }

    [DataMember(Name = "Name")]
    public string Name { get; set; }
}

public class Event
{
    [DataMember(Name = "EventID")]
    public int Id { get; set; }

    [DataMember(Name = "CalendarEntry")]
    public EventCalendar Calendar { get; set; }
}
于 2012-12-24T11:08:23.273 に答える
0
{
   EventID: 4,
   CalendarEntry : 
   {
      CalendarID: 4,
      AreaID: 41,
      Name: "My Event Entry #4"
   }
}

多分 :-?

{
   EventID: 4,
   CalendarEntry : 
   [{
      CalendarID: 4,
      AreaID: 41,
      Name: "My Event Entry #4"
   }]
}
于 2012-12-24T10:31:10.627 に答える