【问题标题】:Json MultiArray & ServiceStackJson MultiArray 和 ServiceStack
【发布时间】:2014-02-07 08:28:53
【问题描述】:

有一行 {"level": [{"level": 1, "points": 0, "name": "Some"}, {"level": 2, "points": 50, "name ":"二级"},{"级":3,"点数":100,"姓名":"三级"}]}

如何修复现有代码或添加获取时请求完全相同的行?

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Web;
using System.Runtime.Serialization;  
using System.ComponentModel;  
using ServiceStack.ServiceHost;

namespace MSWA.Classes  
{  
  [DataContract]  
  [Description("Get config")]  
  [RestService("/gconf")]  
  public class GameConfiguration  
  {
    [DataMember]
    public string puid { get; set; }
  }

  [DataContract]
  public class GameConfigurationResponse
  {
    [DataMember]
    public LevelList ll;

    [DataMember]
    public string TestResponse { get; set; }
  }

  // Level List
  [DataContract]
  public class LevelList
  {
    [DataMember]
    public List<Level> level { get; set; }
  }

  // Desc one level
  [DataContract]
  public class Level
  {
    [DataMember]
    public int level { get; set; }
    [DataMember]
    public int points { get; set; }
    [DataMember]
    public string name { get; set; }
  }

  /// Create your Web Service implementation
  public class GameConfigurationService : IService<GameConfiguration>
  {
    public object Execute(GameConfiguration request)
    {
      // Original data
      string respValue = "";

      respValue = request.puid;

      if (respValue == null || respValue == "0") respValue = "0";

      Level lvl = new Level(){level=1, points=0, name=""};

      LevelList llist = new LevelList();
      llist.level.Add(lvl);

      return new GameConfigurationResponse
      {
          ll = llist
      };
    }
  }
}

【问题讨论】:

  • 你说的有一条线是什么意思?您似乎想反序列化 JSON 字符串,但不清楚在哪里!

标签: c# json multidimensional-array servicestack


【解决方案1】:

我希望我已经理解了你的问题。我想你是在问如何更新你现有的代码,以便它输出这个对象:

{
    "level": [
        {"level": 1, "points": 0, "name": "Some"}, 
        {"level": 2, "points": 50, "name": "Second level"}, 
        {"level": 3, "points": 100, "name": "Third level"} 
     ]
 }

您应该删除这些行:

Level lvl = new Level(){level=1, points=0, name=""};

LevelList llist = new LevelList();
llist.level.Add(lvl);

并用这些替换:

LevelList llist = new LevelList();
llist.level = new List<Level>();
llist.level.Add(new Level { level = 1, points = 0, name = "Some" }); 
llist.level.Add(new Level { level = 2, points = 50, name = "Second level" }); 
llist.level.Add(new Level { level = 3, points = 100, name = "Third level" });

更新:

我从您的评论中推测您想将GameConfigurationResponse 更改为仅输出List&lt;Level&gt; 而没有LevelList 对象?

[DataContract]
public class GameConfigurationResponse
{
    [DataMember]
    public List<Level> level { get; set; } 
}

所以对应的Execute 方法是:

public object Execute(GameConfiguration request)
{
    // Original data
    string respValue = request.puid ?? "0";

    return new GameConfigurationResponse
    {
        level = new List<Level> {
            new Level { level = 1, points = 0, name = "Some" },
            new Level { level = 2, points = 50, name = "Second level" }, 
            new Level { level = 3, points = 100, name = "Third level" }
        }
    };
}

我不确定您使用 respValue 做什么。我已将其简化为string respValue = request.puid ?? "O"; 这会将respValue 设置为request.puid,除非它是null,在这种情况下它将设置为0。但是您没有使用这个值,至少在发布的代码中没有。

【讨论】:

  • [DataContract] public class GameConfigurationResponse { [DataMember] public List level { get;放; } } 和 wo LevelList
  • @АлексСандерс 你搞定了吗?这有帮助吗?请提供反馈。谢谢
猜你喜欢
  • 1970-01-01
  • 2014-01-09
  • 1970-01-01
  • 1970-01-01
  • 2013-07-26
  • 2013-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多