C#处理返回的JSON数据

65度 2019-05-08 11:28:50

{
"MSGTY": "S",
"MESSAGE": "DN 读取成功",
"header": {
"VBELN": 8000000032,
"LFART": "ZLF1",
"KUNNR": 10000000,
"NAME": "国内测试客户1",
"WADAT": "",
"KUNNR_S": 10000000,
"STREET": "街道",
"TEXT1": "ewqewqe",
"Item": [
{
"POSNR": "000010",
"WERKS": 2000,
"MATNR": "乌龙",
"ARKTX": "茶品1",
"LGMNG": "4.000 ",
"ZIEME": "KG",
"ZLGMNG": "000000",
"LGORT": "",
"ABTNR": "",
"UEBTO": "0.0 ",
"UNTTO": "0.0 ",
"ZT01": "A",
"ZT02": "",
"ZTXX": ""
},
{
"POSNR": "000020",
"WERKS": 2000,
"MATNR": "龙井",
"ARKTX": "茶品2",
"LGMNG": "5.000 ",
"ZIEME": "KG",
"ZLGMNG": "000000",
"LGORT": "",
"ABTNR": "",
"UEBTO": "0.0 ",
"UNTTO": "0.0 ",
"ZT01": "A",
"ZT02": "",
"ZTXX": ""
}
]
}
}

我现在要用实体类序列化这个数据,怎么整到我的实体类里面
"MSGTY": "S",
"MESSAGE": "DN 读取成功",
这个是提示信息,判断成功与否,首先得处理这个数据,是否成功,成功然后再获取具体信息
header下面的是表头,Item里面的是表体
...全文
278 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
65度 2019-05-08
  • 打赏
  • 举报
回复
引用 4 楼 OrdinaryCoder 的回复:
比如我json实体类是Test 接到的json字符串是json 下面是调用


var jsonObj = JsonDeserialize<Test>(json);

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace verb
{
public class SaleCode
{
/// <summary>
///
/// </summary>
public string MSGTY { get; set; }
/// <summary>
///
/// </summary>
public string MESSAGE { get; set; }
public List<Header> data { get; set; }

}
public class Header
{
/// <summary>
///
/// </summary>
public string VBELN { get; set; }
/// <summary>
///
/// </summary>
public string LFART { get; set; }
/// <summary>
///
/// </summary>
public string KUNNR { get; set; }
/// <summary>
///
/// </summary>
public string NAME { get; set; }
/// <summary>
///
/// </summary>
public string WADAT { get; set; }
/// <summary>
///
/// </summary>
public string KUNNR_S { get; set; }
/// <summary>
///
/// </summary>
public string STREET { get; set; }
/// <summary>
///
/// </summary>
public string TEXT1 { get; set; }
/// <summary>
///
/// </summary>
public List<HeaderItem> data { get; set; }
}

public class HeaderItem
{
/// <summary>
///
/// </summary>
public string POSNR { get; set; }
/// <summary>
///
/// </summary>
public string WERKS { get; set; }
/// <summary>
/// 已签收,感谢使用顺丰,期待再次为您服务
/// </summary>
public string MATNR { get; set; }
/// <summary>
///
/// </summary>
public string ARKTX { get; set; }
/// <summary>
///
/// </summary>
public string LGMNG { get; set; }
/// <summary>
///
/// </summary>
public string ZIEME { get; set; }
/// <summary>
///
/// </summary>
public string ZLGMNG { get; set; }
/// <summary>
///
/// </summary>
public string LGORT { get; set; }



/// <summary>
///
/// </summary>
public string ABTNR { get; set; }
/// <summary>
///
/// </summary>
public string UEBTO { get; set; }
/// <summary>
///
/// </summary>
public string UNTTO { get; set; }
/// <summary>
///
/// </summary>
public string ZT01 { get; set; }
/// <summary>
///
/// </summary>
public string ZT02 { get; set; }
/// <summary>
///
/// </summary>
public string ZTXX { get; set; }
}

}
我的这个实体类这么申明是不是有问题,解释不出来,后面的header都解析不出来
65度 2019-05-08
  • 打赏
  • 举报
回复
引用 4 楼 OrdinaryCoder 的回复:
比如我json实体类是Test 接到的json字符串是json 下面是调用


var jsonObj = JsonDeserialize<Test>(json);

感谢!!!
正怒月神 2019-05-08
  • 打赏
  • 举报
回复
3楼已经说了,就不赘述了。
baibaip 2019-05-08
  • 打赏
  • 举报
回复
C# 有像PHP那种读取结果集 直接可以输出JSON的函数吗
OrdinaryCoder 2019-05-08
  • 打赏
  • 举报
回复
比如我json实体类是Test 接到的json字符串是json 下面是调用


var jsonObj = JsonDeserialize<Test>(json);
OrdinaryCoder 2019-05-08
  • 打赏
  • 举报
回复
把你上面的json复制 然后打开VS 创建一个新类 点编辑-》选择性粘贴-》将json粘贴为类 这个就是你的实体类
接下来 只要掉用我上面的函数把你接来的json字符串当参数传进去就可以返回这个类的对象 注意调用时要规定泛型T的类型 就是你json实体类
65度 2019-05-08
  • 打赏
  • 举报
回复
引用 1 楼 OrdinaryCoder 的回复:

/// <summary>
/// JSON反序列化
/// </summary>
public static T JsonDeserialize<T>(string jsonString)
{
var ser = new DataContractJsonSerializer(typeof(T));
var ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
var obj = (T)ser.ReadObject(ms);
return obj;
}

有能具体点吗?之前没有接触过这个json
OrdinaryCoder 2019-05-08
  • 打赏
  • 举报
回复

/// <summary>
/// JSON反序列化
/// </summary>
public static T JsonDeserialize<T>(string jsonString)
{
var ser = new DataContractJsonSerializer(typeof(T));
var ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
var obj = (T)ser.ReadObject(ms);
return obj;
}
OrdinaryCoder 2019-05-08
  • 打赏
  • 举报
回复

var js = JsonConvert.SerializeObject<List<Hashtable>>(listmore);
65度 2019-05-08
  • 打赏
  • 举报
回复
引用 13 楼 OrdinaryCoder 的回复:
[quote=引用 12 楼 65度 的回复:]
[quote=引用 10 楼 OrdinaryCoder 的回复:]
弄好了就行

List<Hashtable> listmore = new List<Hashtable>();
for (int i = 0; i < 2; i++)
{
Hashtable dic = new Hashtable();
dic.Add("AUFNR", "12" + i.ToString());
dic.Add("BWART", "13" + i.ToString());
dic.Add("WERKS", "45" + i.ToString());
dic.Add("LGORT", "45" + i.ToString());
dic.Add("BLDAT", "0101" + i.ToString());
dic.Add("BUDAT", "RMB" + i.ToString());
dic.Add("ZMBLNR", "1" + i.ToString());
dic.Add("MENGE", "12" + i.ToString());
dic.Add("LOBM_HSDAT", "23" + i.ToString());
dic.Add("ZT03", "228" + i.ToString());
dic.Add("ZT05", "0" + i.ToString());
dic.Add("LOBM_UDCODE", "1" + i.ToString());
dic.Add("LOBM_VFDAT", "2" + i.ToString());
dic.Add("ZT01", "4" + i.ToString());
dic.Add("ZT07", "0" + i.ToString());
dic.Add("ZT11", "1" + i.ToString());
dic.Add("ZT13", "34" + i.ToString());
dic.Add("ZCP0010", "4" + i.ToString());
listmore.Add(dic);
}

var js = JsonConvert.SerializeObject(listmore);

这是我现在的做法,有点呆板,有没有更好的办法[/quote]
可以用T传泛型集合就OK[/quote]

有实例吗?
OrdinaryCoder 2019-05-08
  • 打赏
  • 举报
回复
引用 12 楼 65度 的回复:
[quote=引用 10 楼 OrdinaryCoder 的回复:]
弄好了就行

List<Hashtable> listmore = new List<Hashtable>();
for (int i = 0; i < 2; i++)
{
Hashtable dic = new Hashtable();
dic.Add("AUFNR", "12" + i.ToString());
dic.Add("BWART", "13" + i.ToString());
dic.Add("WERKS", "45" + i.ToString());
dic.Add("LGORT", "45" + i.ToString());
dic.Add("BLDAT", "0101" + i.ToString());
dic.Add("BUDAT", "RMB" + i.ToString());
dic.Add("ZMBLNR", "1" + i.ToString());
dic.Add("MENGE", "12" + i.ToString());
dic.Add("LOBM_HSDAT", "23" + i.ToString());
dic.Add("ZT03", "228" + i.ToString());
dic.Add("ZT05", "0" + i.ToString());
dic.Add("LOBM_UDCODE", "1" + i.ToString());
dic.Add("LOBM_VFDAT", "2" + i.ToString());
dic.Add("ZT01", "4" + i.ToString());
dic.Add("ZT07", "0" + i.ToString());
dic.Add("ZT11", "1" + i.ToString());
dic.Add("ZT13", "34" + i.ToString());
dic.Add("ZCP0010", "4" + i.ToString());
listmore.Add(dic);
}

var js = JsonConvert.SerializeObject(listmore);

这是我现在的做法,有点呆板,有没有更好的办法[/quote]
可以用T传泛型集合就OK
65度 2019-05-08
  • 打赏
  • 举报
回复
引用 10 楼 OrdinaryCoder 的回复:
弄好了就行

List<Hashtable> listmore = new List<Hashtable>();
for (int i = 0; i < 2; i++)
{
Hashtable dic = new Hashtable();
dic.Add("AUFNR", "12" + i.ToString());
dic.Add("BWART", "13" + i.ToString());
dic.Add("WERKS", "45" + i.ToString());
dic.Add("LGORT", "45" + i.ToString());
dic.Add("BLDAT", "0101" + i.ToString());
dic.Add("BUDAT", "RMB" + i.ToString());
dic.Add("ZMBLNR", "1" + i.ToString());
dic.Add("MENGE", "12" + i.ToString());
dic.Add("LOBM_HSDAT", "23" + i.ToString());
dic.Add("ZT03", "228" + i.ToString());
dic.Add("ZT05", "0" + i.ToString());
dic.Add("LOBM_UDCODE", "1" + i.ToString());
dic.Add("LOBM_VFDAT", "2" + i.ToString());
dic.Add("ZT01", "4" + i.ToString());
dic.Add("ZT07", "0" + i.ToString());
dic.Add("ZT11", "1" + i.ToString());
dic.Add("ZT13", "34" + i.ToString());
dic.Add("ZCP0010", "4" + i.ToString());
listmore.Add(dic);
}

var js = JsonConvert.SerializeObject(listmore);

这是我现在的做法,有点呆板,有没有更好的办法
65度 2019-05-08
  • 打赏
  • 举报
回复
引用 10 楼 OrdinaryCoder 的回复:
弄好了就行

能多请教一个问题么,我现在有一部分数据,要转换成JSON格式,可能是多个类似的对象转化成对象
比如 学生1
名字: 1
年龄: 2
学生2
名字: 3
年龄: 4

OrdinaryCoder 2019-05-08
  • 打赏
  • 举报
回复
弄好了就行
65度 2019-05-08
  • 打赏
  • 举报
回复
引用 4 楼 OrdinaryCoder 的回复:
比如我json实体类是Test 接到的json字符串是json 下面是调用


var jsonObj = JsonDeserialize<Test>(json);

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace verb
{
public struct SaleCode
{
/// <summary>
///
/// </summary>
public string MSGTY { get; set; }
/// <summary>
///
/// </summary>
public string MESSAGE { get; set; }
public Header header;

}
public struct Header
{
/// <summary>
///
/// </summary>
public string VBELN { get; set; }
/// <summary>
///
/// </summary>
public string LFART { get; set; }
/// <summary>
///
/// </summary>
public string KUNNR { get; set; }
/// <summary>
///
/// </summary>
public string NAME { get; set; }
/// <summary>
///
/// </summary>
public string WADAT { get; set; }
/// <summary>
///
/// </summary>
public string KUNNR_S { get; set; }
/// <summary>
///
/// </summary>
public string STREET { get; set; }
/// <summary>
///
/// </summary>
public string TEXT1 { get; set; }
/// <summary>
///
/// </summary>
//public HeaderItem Item;
public List<HeaderItem> Item { get; set; }
}

public struct HeaderItem
{
/// <summary>
///
/// </summary>
public string POSNR { get; set; }
/// <summary>
///
/// </summary>
public string WERKS { get; set; }
/// <summary>
/// 已签收,感谢使用顺丰,期待再次为您服务
/// </summary>
public string MATNR { get; set; }
/// <summary>
///
/// </summary>
public string ARKTX { get; set; }
/// <summary>
///
/// </summary>
public string LGMNG { get; set; }
/// <summary>
///
/// </summary>
public string ZIEME { get; set; }
/// <summary>
///
/// </summary>
public string ZLGMNG { get; set; }
/// <summary>
///
/// </summary>
public string LGORT { get; set; }
/// <summary>
///
/// </summary>
public string ABTNR { get; set; }
/// <summary>
///
/// </summary>
public string UEBTO { get; set; }
/// <summary>
///
/// </summary>
public string UNTTO { get; set; }
/// <summary>
///
/// </summary>
public string ZT01 { get; set; }
/// <summary>
///
/// </summary>
public string ZT02 { get; set; }
/// <summary>
///
/// </summary>
public string ZTXX { get; set; }
}

}
解决好了
SaleCode sc = JsonConvert.DeserializeObject<SaleCode>(jsodn);
string mt = sc.MSGTY;
if (mt == "S")
{
string kk= sc.header.KUNNR;
List<HeaderItem> orderdetail = sc.header.Item;
foreach (var ls in orderdetail)
{
string dse = ls.MATNR;
}
}
else
{ }

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧