小编Ric*_*nia的帖子

使用特定订单序列化地图

我有一个使用字符串作为键和值的映射.我有一个键数组,指定映射值的顺序.

我想将该映射序列化为JSON,但保持在数组上定义的顺序.

这里有一个示例代码:http://play.golang.org/p/A52GTDY6Wx

我想将它序列化为:

{
  "name": "John",
  "age": "20"
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我直接序列化地图,则按字母顺序排列键:

{      
  "age": "20",
  "name": "John"
}
Run Code Online (Sandbox Code Playgroud)

我可以将它序列化为一个映射数组,从而保持顺序,但是会产生许多不需要的字符:

[
  {
    "name": "John"
  },
  {
    "age": "20"
  }
]
Run Code Online (Sandbox Code Playgroud)

在我的实际代码中,我需要序列化在文本文件中指定的数据库查询的结果,并且我需要维护列顺序.我不能使用结构,因为在编译时不知道列.

编辑:我不需要按照指定的顺序读取JSON.生成的JSON应该由人们阅读,所以我只是希望它尽可能具有人类可读性.

我可以使用自定义格式,但JSON非常适合我.

谢谢!

serialization json go

7
推荐指数
2
解决办法
6655
查看次数

ASP.Net 5 MVC 6 - 如何使用FromBody在POST上返回无效的JSON消息?

我正在使用.Net 4.5.1创建一个使用MVC 6的ASP.Net 5应用程序.我有一个POST方法,它使用FromBody参数自动获取对象.

[HttpPost]
public IActionResult Insert([FromBody]Agent agent)
{    
    try
    {
        var id = service.Insert(agent);
        return Ok(id);
    }
    catch (Exception ex)
    {
        return HttpBadRequest(ex);
    }
}
Run Code Online (Sandbox Code Playgroud)

这只是一个概念的证明,我不会只返回成功的id或错误的完整异常.

当发送有效的JSON时,一切正常.但是,当发送无效的JSON时,我在调试期间收到异常:

抛出异常:Newtonsoft.Json.dll中的'Newtonsoft.Json.JsonReaderException'

附加信息:解析值后,遇到意外字符:l.路径'名称',第2行,第20位.

问题是在此错误之后,该方法被正常调用,但是使用null参数,并且异常不会传播.

我可以检查null并返回一个通用消息,但这并不像原始消息那样有用,它包含重要信息,例如标记名称和无效字符的位置.

所以我想捕获此异常并将其返回给HTTP调用者.我怎么做?像这样的东西:

{"error": "After parsing a value an unexpected character was encountered: l. Path 'Name', line 2, position 20"}
Run Code Online (Sandbox Code Playgroud)

我知道我可以在try/catch块中手动捕获和反序列化JSON,但这对我来说是不可接受的.我想这样做并继续使用FromBody,我发现它很有效率.

c# asp.net-mvc asp.net-core-mvc

7
推荐指数
2
解决办法
2553
查看次数

Dapper - 将子对象作为查询参数传递

当它们具有相同名称的属性时,是否可以将子对象或多个对象作为查询参数传递给 Dapper?

例如,如果我有这些类:

class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public City City { get; set; }
}

class City
{
    public int Id { get; set; }
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想执行这个查询:

connect.QueryFirst<Result>("select :Id Id, :Name Name, :City_Id City_Id, :City_Name City_Name from dual", personParams);
Run Code Online (Sandbox Code Playgroud)

我在没有反射的情况下设法做到的唯一方法是传递第一个对象,然后一个接一个地添加其他属性:

var personParams = new DynamicParameters(person);
personParams.AddDynamicParams(new { City_Id = person.City.Id, City_name = person.City.Name });
Run Code Online (Sandbox Code Playgroud)

但是在数据库上有数百个表,其中一些有一百多个列,我需要将它们拆分为多个类。因此,一个接一个地传递参数是徒劳的。

我尝试将参数添加到一个临时包中,然后为每个包添加一个前缀,如下所示:

static DynamicParameters GetParameters(object mainEntity, …
Run Code Online (Sandbox Code Playgroud)

c# dapper

7
推荐指数
0
解决办法
1025
查看次数

如何避免使用 Typescript 在 React 构造函数中重新声明 props 类型

假设我有一个这样的课程:

class PeopleByTag extends React.Component<RouteComponentProps<{ tag: string }>
Run Code Online (Sandbox Code Playgroud)

我需要在我的构造函数中做一些事情,在这个例子中获取数据,但要做到这一点,我需要声明一个 props 参数,但如果我不指定类型,它将变成任何类型:

constructor(props) {
    super(props); // props is any
    this.loadData();
}
Run Code Online (Sandbox Code Playgroud)

另一方面,如果我重新声明类型,代码会变得非常难看:

constructor(props: Readonly<{
    children?: React.ReactNode;
}> & Readonly<RouteComponentProps<{
    tag: string;
}, StaticContext, any>>) {
    super(props);
    this.loadData();
}
Run Code Online (Sandbox Code Playgroud)

有没有办法从类扩展中自动推断 props 类型,同时还可以编写构造函数?

我也不想使用已弃用的生命周期挂钩(即 ComponentWillMount)。

typescript reactjs

6
推荐指数
1
解决办法
2660
查看次数

Flutter-如何在小部件测试中获取文本小部件

我正在尝试在Flutter中创建一个简单的小部件测试。我有一个自定义窗口小部件,该窗口小部件接收一些值,组成一个字符串并显示带有该字符串的文本。我必须创建窗口小部件并且它可以工作,但是在读取Text组件的值来断言所生成的文本正确时遇到了麻烦。

我创建了一个简单的测试来说明问题。我想获取文本值,即“文本”。我尝试了几种方法,如果我得到查找程序asString(),我可以解释字符串以获取值,但是我认为这不是一个好的解决方案。我想以文本形式读取组件,以便可以访问所有属性。

那么,我将如何阅读Text小部件,以便访问data属性?

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
  testWidgets('my first widget test', (WidgetTester tester) async {

    await tester
        .pumpWidget(MaterialApp(home: Text("text", key: Key('unit_text'))));

    // This works and prints: (Text-[<'unit_text'>]("text"))
    var finder = find.byKey(Key("unit_text"));
    print(finder.evaluate().first);

    // This also works and prints: (Text-[<'unit_text'>]("text"))
    var finderByType = find.byType(Text);
    print(finderByType.evaluate().first);

    // This returns empty
    print(finder.first.evaluate().whereType<Text>());

    // This throws: type 'StatelessElement' is not a subtype of type 'Text' in type cast
    print(finder.first.evaluate().cast<Text>().first);

  });
}
Run Code Online (Sandbox Code Playgroud)

testing flutter

4
推荐指数
3
解决办法
1525
查看次数

在 Flutter 中,如何使用 CachedNetworkImage 显示来自 Firebase 的离线图像?

我正在尝试使用 Firebase 使我的 Flutter 应用离线工作。我在 Firestore 上存储了对我的图像的引用,在 Storage 上存储了图像文件。我让 Firestore 部分正常工作,并且我使用 CachedNetworkImageProvider 来显示我的图像,该图像缓存以供离线使用。但是当我离线时,即使图像被缓存,我也无法获取图像的URL,因此无法将其传递给以URL为键的CachedNetworkImageProvider。

因此,离线时我知道图像路径,并且我将文件存储在设备上,我只需要一种获取 URL 的方法。

我是否需要手动将存储中的下载 URL 存储在设备上,以便我可以离线使用它们?或者,还有更好的方法?

获取网址的代码:

// this doesn't work offline
category.url = await storage
    .ref()
    .child("category_images/drawable-${DeviceInfo.dpiString}")
    .child(document.data["media"]["src"])
    .getDownloadURL();
Run Code Online (Sandbox Code Playgroud)

显示图像的代码:

image: new CachedNetworkImageProvider(_category.url),
Run Code Online (Sandbox Code Playgroud)

android dart firebase flutter firebase-storage

2
推荐指数
1
解决办法
1724
查看次数

有没有办法控制 JSON 对象中的属性顺序?

我使用的是 Entity Framework Core,生成的类有自己的属性,即

数据模型.Agent.cs

public partial class Agent {

    public virtual decimal Id
    {
        get;
        set;
    }

    public virtual string Name
    {
        get;
        set;
    }
}
Run Code Online (Sandbox Code Playgroud)

但我需要其他属性,所以我在另一个文件中声明它们:

代理.cs

public partial class Agent
{
    [NotMapped]
    public dynamic Custom { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

问题是Agent.cs是在DataModel.Agent.cs之前编译的,所以编译器按照这个顺序生成属性:Custom、Id、Name,结果JSON很奇怪。

我希望它是:ID、名称、自定义。换句话说,我总是希望 DataModel 类排在第一位。

编辑:澄清一下,唯一的目标是通过始终将 Id 放在首位来使 JSON 更漂亮,这是一种非常常见的模式。这对应用程序的工作方式绝对没有影响。

有没有办法强制编译器始终首先编译其中一个文件?

.net c# partial-classes

1
推荐指数
1
解决办法
1990
查看次数