- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在过去的几个小时里,我一直在努力解决这个问题,尽管我很接近,但我的想法似乎只是让它变得越来越复杂,所以我认为我应该寻求帮助。
我在 C#
中有这个类:
public class MyTestObject
{
public string name { get; set; }
public string lastname { get; set; }
public List<MyImages> {get; set; }
}
public class MyImages
{
public string imageName { get; set; }
public string imageBytes { get; set; }
}
我想在 Android
中创建一个可以解析为该格式的 JSONObject
,但我不确定该怎么做。
这是我目前所拥有的(在 Android/Java
中):
Map<String, String> myParameters = new HashMap<>();
myParameters.put("name", "test");
myParameters.put("lastname", "test");
List<MyImage> images = getListOfImages();
if (images != null && images.size() > 0) {
Map<String, String> jsonMap = new HashMap<>();
for (MyImage image : images) {
jsonMap.put(image.getImageName(), image.getImageBytes());
}
myParameters.put("images", jsonMap);
}
JSONObject data = new JSONObject(myParameters);
callWcfService(data); // makes a POST request to the service and passes the JSON object
理论上,这种“几乎”以所需格式创建了 JSON 对象,但后来我无法在 C# 中对其进行解码。
这是应该解码 JSON 字符串的 WCF 服务中的代码:
var reader = new StreamReader(data);
var request = reader.ReadToEnd();
request = request.Replace("=", ":"); // i need to replace the `=` that is for some reason added in the JSON with `:`
var parser = new JavaScriptSerializer();
var myObject = parser.Deserialize<MyTestObject>(request); // it crashes here
异常(exception)情况是:
Cannot convert object of type 'System.String' to type 'System.Collections.Generic.List`1[MyImages]'
从 java 代码生成的 JSON 如下所示:
{"images":"{sl_big_ass_logo.png=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\n}","name":"test","lastname":"test"}
最佳答案
我不太了解Java,但我认为你的序列化算法是错误的,特别是这部分:
Map<String, String> jsonMap = new HashMap<>();
for (MyImage image : images) {
jsonMap.put(image.getImageName(), image.getImageBytes());
}
myParameters.put("images", jsonMap);
"images"
不应包含 Map<String, String>
而是 JsonArray
.
自 myParameters
类型为 Map<String, String>
您不能将数组添加到 hashmap,因此我们必须寻找更灵活的解决方案。
尝试以下操作:
JsonObjectBuilder jsonObject = Json.createObjectBuilder();
jsonObject.add("name", "test");
jsonObject.add("lastname", "test");
JsonArrayBuilder jsonArray = Json.createArrayBuilder();
for(MyImage image : images)
{
JsonObjectBuilder imageJson = Json.createObjectBuilder();
imageJson.add("imageName", image.getImageName());
imageJson.add("imageBytes", image.getImageBytes());
jsonArray.add(imageJson.build());
}
jsonObject.add("images", jsonArray.build());
JsonObject data = jsonObject.build();
callWcfService(data);
然后,您的 WCF 服务应该会根据您向我们展示的模型反序列化它。
请注意,我提供的代码未经我测试,而是取自 JsonArray's documentation
关于java - 如何在 android 中创建这个嵌套的 JSON 对象并在 c# 中对其进行解码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33324593/
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!