我正面临一个奇怪的问题。
我的PCL项目中有一个通用代码。 这段代码目前正在我的Windows Phone项目中完成,但不在Android手机项目中。
这里的代码:(有问题的方法是CreateListFriend)
public class Friend : IFriend<User>
{
public int Id { get; set; }
public string UserId { get; set; }
public virtual User User { get; set; }
private static volatile Friend instance;
private static object syncRoot = new Object();
private Friend() { }
public static Friend Instance
{
get
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
instance = new Friend();
}
}
return instance;
}
}
/// <summary>
/// Populate friend instance
/// </summary>
/// <param name="json">Json friend string</param>
public void PopulateFriend(string json)
{
if (!String.IsNullOrEmpty(json))
{
var resultObj = JsonConvert.DeserializeObject<Friend>(json);
Friend.Instance.Id = resultObj.Id;
Friend.Instance.UserId = resultObj.UserId;
}
}
/// <summary>
/// Create friend list from json
/// </summary>
/// <param name="json">json string</param>
/// <returns>friend list</returns>
public List<Friend> CreateListFriend(string json)
{
List<Friend> resultObj = new List<Friend>();
if (!String.IsNullOrEmpty(json))
{
resultObj = JsonConvert.DeserializeObject<List<Friend>>(json);
}
return resultObj;
}
}
正如您在上一张图片中看到的那样,Json.net能够“反序列化”,但对象朋友donc拥有正确的“字段”....
我已经试图压制这个类并重新创建它...... 我已经创建了一个具有相同字段的结构,所有json都正确反序列化,但我不想这样做。
有人有想法......
答案 0 :(得分:0)
假设我们有两个JSON
源文件:
<强> friend.json:强>
{
"id": 5,
"userId": 6
}
<强> friends.json:强>
[
{
"id": 1,
"userId": 2
},
{
"id": 2,
"userId": 3
},
{
"id": 3,
"userId": 4
},
{
"id": 4,
"userId": 5
}
]
我们也有Friend
课程。根据您的示例,您的类是实体框架的POCO。如果源文件与您的类具有相同的属性名称,则不需要JsonProperty
属性。
注意:我没有为Friend
类定义任何构造函数,因此默认情况下它只有一个公共无参数构造函数。
public class Friend
{
[JsonProperty("id")]
public int Id { get; set; }
[JsonProperty("userId")]
public string UserId { get; set; }
public virtual User User { get; set; }
public override string ToString()
{
return String.Format("User: Id={0}; UserId={1}", Id, UserId);
}
}
我会将创建Friend
实例的逻辑分开。举个例子,我创建了一个FriendLoader
类。
public class FriendLoader
{
public Friend LoadFriend(string jsonSource)
{
return String.IsNullOrEmpty(jsonSource) ? null : JsonConvert.DeserializeObject<Friend>(jsonSource);
}
public List<Friend> LoadFriends(string jsonSource)
{
var friends = new List<Friend>();
if (!String.IsNullOrEmpty(jsonSource))
{
friends = JsonConvert.DeserializeObject<List<Friend>>(jsonSource);
}
return friends;
}
}
以下是测试上述代码的控制台应用程序。
class Program
{
static void Main(string[] args)
{
string friendJson = File.ReadAllText("friend.json");
string friendsJson = File.ReadAllText("friends.json");
var loader = new FriendLoader();
var friend = loader.LoadFriend(friendJson);
var friends = loader.LoadFriends(friendsJson);
Console.WriteLine("One friend:");
Console.WriteLine(friend);
Console.WriteLine();
Console.WriteLine("List of friends:");
friends.ForEach(Console.WriteLine);
}
}
希望这有帮助。
顺便问一下,您能否展示一下IFriend<T>
界面的定义?
答案 1 :(得分:0)
对不起延迟我本周没有时间发帖。
这与我的课无关,而是与android.platform有关。
我们只需要告诉android平台保留所有属性:
[Preserve(AllMembers = true)]
感谢您的时间:)