为什么需要将字符串列表转换为关联数组?AngularJs 可以处理对数组的迭代。
这是一个演示的 plnkr:http: //plnkr.co/edit/TcXxSBkt7NBkqNJhkSE1
本质上,服务器返回对象,属性 SomeListItems 是一个数组。
用于ng-repeat
迭代它们
<ul>
<li ng-repeat="item in data.SomeListItems">{{item}}</li>
</ul>
我看到了这个问题的几个解决方案,或者按摩客户端或服务器上的数据结构。
这是一个 plnkr,它显示了将从服务器接收到的字符串数组转换为关联数组,以便可以在客户端上对其进行编辑,然后重新转换回单维数组以发布到服务器。
相反,您可以在服务器上执行此操作。如果您将 SomeListItems 声明为动态列表,那么您可以为其分配任何您想要的东西,包括 ServiceStack 序列化程序应该能够处理的匿名对象(我还没有测试过,但我认为它会起作用)。
[Route("/path/{Id}", "GET, OPTIONS")]
public class MyModel
{
public int Id { get; set; }
public List<dynamic> SomeListItems { get; set; }
}
// in a controller or service
var model = new MyModel() { Id = 1 };
model.SomeListItems = new List<dynamic> {
new { Key = 1, Value = "foo }, new {Key = 2, Value = "bar" }
}; // this should serialize to JSON as { Id: 1, SomeListItems: [ {Key: 1, Value: 'foo'}, {Key:2, Value = 'bar'}]}; which angular can handle nicely
或者,您可以指定一个不那么冗长的自定义类KeyValuePair<string, string>
public class JsonPayload
{ // yes, it's just a KVP, but it's much more concise
public string Key {get;set;}
public string Value {get;set;}
}
然后重新定义你的模型
[Route("/path/{Id}", "GET, OPTIONS")]
public class MyModel
{
public int Id { get; set; }
public List<JsonPayload> SomeListItems { get; set; }
}
这比使用动态更冗长,但 JSON 序列化肯定能够处理这个问题。