【问题标题】:JSON object key an value order using Class Object C# [duplicate]JSON对象键值顺序使用类对象C# [重复]
【发布时间】:2016-05-17 19:16:09
【问题描述】:

我有一个 WCF 服务 POST 方法,如下所示:

[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedResponse, ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json, UriTemplate = "GetResult/{schoolid}")]
[return: MessageParameter(Name = "ExamResult")]
CResults GetExamResult(CExamResultQuery pObj, string schoolid);

这里是 CResults 类:

 public class CResults
    {
        public string studentname { get; set; }
        public string studentid { get; set; }
        public string telugu { get; set; }
        public string hindi { get; set; }
        public string english { get; set; }
        public string mathematics { get; set; }
        public string science { get; set; }
        public string social { get; set; }
        public string totalresult { get; set; }

    }

我在客户端的 Post 响应中收到一个 JSON 字符串,但键(值)的顺序不同。这是 JSON:

"{\"ExamResult\":{\"english\":\"80\",\"hindi\":\"80\",\"mathematics\":\"80\",\"science\":\"80\",\"social\":\"80\",\"studentid\":\"50\",\"studentname\":\"Ashok\",\"telugu\":\"80\",\"totalresult\":\"PASS\"}}"

我看到 JSON 按字母顺序而不是 Class 变量顺序。如何以与我的班级相同的方式制作 JSON 订单。

这是我从 JSON 字符串中提取键和值的方法

 JSONObject jsonRootObject = new JSONObject(jsonData);

            JSONObject innerObj = jsonRootObject.getJSONObject("ExamResult");

                Iterator<?> keys = innerObj.keys();
                while (keys.hasNext()) {
                    String key = (String) keys.next();
                    mActivity.updateResultsTable(""+key+": "+innerObj.get(key).toString());
                //    Log.i("testExtrace JSONObject", "key " + key + ": value " + innerObj.get(key).toString());

                }

我知道我可以使用如下键提取 JSON 值:

 String studentName= jsonRootObject.getString("studentname");

我只想更改 WCF 类,这可能有助于按我期望的顺序提取任何 JSON。

感谢支持

【问题讨论】:

  • 为什么提取顺序很重要?在您提取值(以它们出现的任何顺序)之后,是什么阻止您以其他方式对它们进行排序?
  • @BrianRogers 我知道我可以提取。想知道如何在 C# 中完成。
  • 您可以使用[DataMember(Order = X)]。见How do I control the order of properties in my JSON output?。但是根据JSON standard,JSON 对象是一组无序的名称/值对,因此使您的代码依赖于属性顺序是不标准的。
  • @dbc +1 感谢您的解决方案和链接。搞砸了我对你的投票。对不起

标签: c# json wcf


【解决方案1】:

您可以使用 DataMember(Order) 属性,如下所示:

[DataContract]
public class CResults
{
    [DataMember(Order = 0)]
    public string studentname { get; set; }
    [DataMember(Order = 1)]
    public string studentid { get; set; }
    [DataMember(Order = 2)]
    public string telugu { get; set; }
    [DataMember(Order = 3)]
    public string hindi { get; set; }
    [DataMember(Order = 4)]
    public string english { get; set; }
    [DataMember(Order = 5)]
    public string mathematics { get; set; }
    [DataMember(Order = 6)]
    public string science { get; set; }
    [DataMember(Order = 7)]
    public string social { get; set; }
    [DataMember(Order = 8)]
    public string totalresult { get; set; }

}

【讨论】:

    猜你喜欢
    • 2018-07-28
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 2014-07-09
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    相关资源
    最近更新 更多