我正在使用 Json.Net 进行 Json 反序列化。有时我读取的 Json 字符串不正确(我无法修复,因为我没有生成它)。特别是,在一个特定的地方,应该有一个字符串,有时会有一个序列化的对象。毫不奇怪,Json.Net 然后抱怨在它期望一个字符串的地方找到一个对象。
我发现我可以通过使用Errorin拦截它,JsonSerializerSettings并通过设置ErrorContext.Handled. 但我还想做更多。如果我可以查看序列化对象,我就可以弄清楚字符串应该是什么,并且理论上可以提供正确的答案。在实践中,我无法弄清楚我们该怎么做。特别是,在错误处理程序中:
ErrorContext.Handled设置了解析器可以成功继续,因此它可以正确确定问题字符串的开始和结束)?[编辑] 根据要求提供一个简化示例:
我要解析的不正确的 Json 字符串:
{
    "id": 2623,
    "name": {
        "a": 39,
        "b": 0.49053320637463277,
        "c": "cai5z+A=",
        "name": "22"
    },
    "children": [
        {
            "id": 3742,
            "name": {
                "a": 37,
                "b": 0.19319664789046936,
                "c": "Me/KKPY=",
                "name": "50"
            },
            "children": [
                {
                    "id": 1551,
                    "name": {
                        "a": 47,
                        "b": 0.6935373953047849,
                        "c": "qkGkMwY=",
                        "name": "9"
                    },
                    "children": []
                },
                {
                    "id": 4087,
                    "name": {
                        "a": …我正在尝试使用 AWS Android SDK 1.0.4 或 1.0.3 从 S3 下载对象。
这是我的代码:
AmazonS3Client client = getConnection(userCredentials);
S3Object obj = client.getObject(workspaceName, objectName);
ObjectMetadata meta = obj.getObjectMetadata();
long size = meta.getContentLength();
logger.info("S3 object length: "+size);
InputStream is = new BufferedInputStream(obj.getObjectContent());
byte[] fragmentBytes = IOUtils.toByteArray(is);
logger.info("Read bytes: "+ fragmentBytes.length);
这有时(但很少)有效。大多数情况下,要么抛出“java.net.SocketException:Socket is close”,要么不报告错误,但只读取对象的一部分。
请注意, 应该BufferedInputStream不是必需的,IOUtils.toByteArray(...)并且存在或不存在都没有区别。
在调试器中逐行单步执行代码时似乎不会出现该问题。
我的 Android 2.3.3 设备和 3.2 设备上会发生这种情况。它通过 WiFi 和 3G 进行。
有任何想法吗?
ps> 对象大约有250k大
如果我有一个字典排序的Java字符串列表[s1,s2,s3,s4, ...., sn],然后使用UTF-8编码将每个字符串转换为字节数组bx = sx.getBytes("UTF-8"),字节数组的列表是否[b1,b2,b3,...bn]也按字典排序?
我想更改一些现有的使用flask_admin. 其中一种视图inline_models与(ClassName, Options)声明模式一起使用。内联类有一个文本字段。我想通过以下方式更改 flask_admin 默认行为:
我做了一些谷歌搜索,但任何看起来有潜力的东西看起来也很重要。我希望有一些合理直接的方法来实现这一目标。
您的帮助将不胜感激。