我正在使用gson将json解析为java bean.对于我使用的API,大量的json结果将结果包含为json对象的第一个属性."gson方式"似乎是创建一个等效的包装器java对象,它具有一个目标输出类型的属性 - 但这会导致不必要的一次性类.这样做有最佳实践方法吗?
例如解析:
{"profile":{"username":"nickstreet","first_name":"Nick","last_name":"Street"}}
我要做:
public class ParseProfile extends TestCase {
public void testParseProfile() {
Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create();
String profileJson = "{\"profile\":{\"username\":\"nickstreet\",\"first_name\":\"Nick\",\"last_name\":\"Street\"}}";
ProfileContainer profileContainer = gson.fromJson(profileJson, ProfileContainer.class);
Profile profile = profileContainer.getProfile();
assertEquals("nickstreet", profile.username);
assertEquals("Nick", profile.firstName);
assertEquals("Street", profile.lastName);
}
}
public class ProfileContainer {
protected Profile profile;
public Profile getProfile() {
return profile;
}
public void setProfile(Profile profile) {
this.profile = profile;
}
}
public class Profile {
protected String username;
protected String firstName;
protected String lastName; …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用NSURLSessionDownloadTask,并利用Apple的内置URL缓存功能.NSURLSessionDataTask使用下面的代码时,我已经成功地使缓存工作:
- (void)downloadUsingNSURLSessionDataTask:(NSURL *)url {
NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfig delegate:self delegateQueue:nil];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request];
[dataTask resume];
}
- (void)cachedDataTaskTest {
// This call performs an HTTP request
[self downloadUsingNSURLSessionDataTask:[NSURL URLWithString:@"http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"]];
[NSThread sleepForTimeInterval:1];
// This call returns the locally cached copy, and no HTTP request occurs
[self downloadUsingNSURLSessionDataTask:[NSURL URLWithString:@"http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"]];
}
Run Code Online (Sandbox Code Playgroud)
但是,我需要执行后台下载,我必须使用NSURLDownloadTask.切换到此时,不会发生缓存行为.
- (void)downloadUsingNSURLSessionDownloadTask:(NSURL *)url {
NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session = [NSURLSession …Run Code Online (Sandbox Code Playgroud) 我有一个C#WCF REST服务,它允许添加书签,通过发送带有以XML格式化的书签的HTTP POST请求.我已经为服务指定了操作契约,它获取了xml并自动为我反序列化了对象.我的问题是,如果请求中的XML元素按字母顺序给出,则反序列化只能正常工作,并且不会填充任何无序元素的值.
我发现这非常令人不满意; 我认为以特定顺序构造XML的要求是不必要的,并且是一个令人头疼的问题.这是添加到服务的所有客户端的主要要求,也是调试可能存在的难题的来源.
是否可以指示WCF与XML元素顺序无关?
一些进一步的细节用于澄清目的:
我的运营合同如下:
[OperationContract]
[WebInvoke(Method="POST", UriTemplate = "/{username}/bookmarks", ResponseFormat = WebMessageFormat.Xml)]
public void PostBookmark(string username, RestBookmark newBookmark);
Run Code Online (Sandbox Code Playgroud)
RestMessage如下所示:
[DataContract(Name = "Bookmark", Namespace = "")]
public class RestBookmark
{
[DataMember]
public string BookmarkMd5 { get; set; }
[DataMember]
public string Url { get; set; }
[DataMember]
public string UserName { get; set; }
[DataMember]
public string Title { get; set; }
[DataMember]
public string Description { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如果我发送以下XML消息,则只有在调用PostBookmark()时才会填充RestMessage对象的UserName属性:
<?xml version="1.0"?><Bookmark><UserName>nick.street</UserName><Url>http://www.stackoverflow.com</Url><BookmarkMd5>f184eb3347cf94f6ce5f5fc2844e3bdd</BookmarkMd5><Description>Developer Forum</Description><Title>Stack …Run Code Online (Sandbox Code Playgroud)