1

私はそのようなクラスの構造を持っています。問題は、以前にシリアル化された Web API コントローラー ユーザー json に転送するときです。アクション対象者のリストのカウントは 0 です。シリアル化された Json は次のようになります。

{"$id":"1","UserId":1,"RealName":"vas`ka","PasswordHash":"password",
 "Email":"somemail","Actionees":
   {"$id":"2","$values": 
      [{"$id":"3","ActioneeId":1,"Status":"doing", "CloseDate":null,
        "DeletedFlag":false, "CreationDate":"2013-03-11T11:48:24.08", 
        "Users":null,  "Comments":null}, {"$id":"4","ActioneeId":2,"Status":"doing",  
        "CloseDate":null, "DeletedFlag":false, 
        "CreationDate":"2013-03-11T12:46:08.787", "Users":null,"Comments":null}
      ]
   }
}


public class User
{
    [Key]
    public Int64 UserId { get; set; }
     public String Email { get; set; }
    public String RealName { get; set; }
    public String PasswordHash { get; set; }

    public virtual List<Actionee> Actionees { get; set; }
}

public class Actionee
{
    [Key]
    public Int64 ActioneeId { get; set; }
    public String Status { get; set; }
    public DateTime? CloseDate { get; set; }
    public Boolean DeletedFlag { get; set; }
    public DateTime? CreationDate { get; set; }

    public virtual List<User> Users { get; set; }
    public virtual IEnumerable<Actionee> Comments { get; set; } 
}

この文字列を application_start に追加しました。

        var xml = GlobalConfiguration.Configuration.Formatters.XmlFormatter;
        var dcs = new DataContractSerializer(typeof(User), null, int.MaxValue, false,  true, null);
        xml.SetSerializer<User>(dcs);

        var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
        json.SerializerSettings.PreserveReferencesHandling =
            Newtonsoft.Json.PreserveReferencesHandling.All;   

       And I tried to deserialized in this way: http://www.asp.net/web-api/overview/formats-and-model-binding/json-and-xml-serialization
4

1 に答える 1

1

エンティティ フレームワーク オブジェクトのシリアル化のため、json が適切にフォーマットされていません

次のような追加のプロパティがあります

"$id":"2","$values"

JsonFormatter は、この追加のプロパティを認識できず、エンティティ フレームワーク オブジェクトを Web API コントローラーのユーザー オブジェクトに変換するために必要なオブジェクトを逆シリアル化できません。

于 2013-03-20T09:00:34.273 に答える