c# WINFORM 怎么post Json格式数据

65度 2019-05-24 02:25:04
{
"data":[ {
"AUFNR": "1000370",
"BWART": "101",
"WERKS": "2000",
"LGORT": "6001",
"BLDAT": "20190522",
"BUDAT": "20190522",
"ZMBLNR": "",
"MENGE": "1",
"CHARG": "10125205",
"LOBM_HSDAT": "20190522",
"ZT03": "0001",
"ZT05": "09",
"LOBM_UDCODE": "",
"LOBM_VFDAT": "",
"ZT01": "02",
"ZT07": "",
"ZT11": "",
"ZT13": "",
"ZCP0010": ""
}
,
{
"AUFNR": "1000370",
"BWART": "101",
"WERKS": "2000",
"LGORT": "6001",
"BLDAT": "20190522",
"BUDAT": "20190522",
"ZMBLNR": "",
"MENGE": "1",
"CHARG": "10125205",
"LOBM_HSDAT": "20190522",
"ZT03": "0001",
"ZT05": "09",
"LOBM_UDCODE": "",
"LOBM_VFDAT": "",
"ZT01": "02",
"ZT07": "",
"ZT11": "",
"ZT13": "",
"ZCP0010": ""
}
]
}


上面是我要发送的json格式,然后我这边建了一个类,数据怎么处理啊?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace verb
{
public class ProductOrderIn
{
public List<OrderInDate> Indata { set; get; }
}
public class OrderInDate
{
/// <summary>
/// 生产订单号
/// </summary>
private string AUFNR { set; get; }
/// <summary>
/// 移动类型
/// </summary>
private string BWART { set; get; }
/// <summary>
/// 工厂代码
/// </summary>
private string WERKS { set; get; }
/// <summary>
/// 库存地点
/// </summary>
private string LGORT { set; get; }
/// <summary>
/// 凭证日期
/// </summary>
private string BLDAT { set; get; }
/// <summary>
/// 过账日期
/// </summary>
private string BUDAT { set; get; }
/// <summary>
/// 物料凭证
/// </summary>
private string ZMBLNR { set; get; }
/// <summary>
/// 入库数量
/// </summary>
private string MENGE { set; get; }
/// <summary>
/// 批次号
/// </summary>
private string CHARG { set; get; }
/// <summary>
/// 内部特性1
/// </summary>
private string LOBM_HSDAT { set; get; }
/// <summary>
/// 内部特性2
/// </summary>
private string ZT03 { set; get; }
/// <summary>
/// 内部特性3
/// </summary>
private string ZT05 { set; get; }
/// <summary>
/// 内部特性4
/// </summary>
private string LOBM_UDCODE { set; get; }
/// <summary>
/// 内部特性5
/// </summary>
private string LOBM_VFDAT { set; get; }
/// <summary>
/// 内部特性6
/// </summary>
private string ZT01 { set; get; }
/// <summary>
/// 内部特性7
/// </summary>
private string ZT07 { set; get; }
/// <summary>
/// 内部特性8
/// </summary>
private string ZT11 { set; get; }
/// <summary>
/// 内部特性9
/// </summary>
private string ZT13 { set; get; }
/// <summary>
/// 内部特性10
/// </summary>
private string ZCP0010 { set; get; }

}
}
...全文
1040 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
65度 2019-05-24
  • 打赏
  • 举报
回复

感谢各位提供的意见,这边搞定了,再次感谢各位!!!

引用 11 楼 OrdinaryCoder 的回复:
[quote=引用 5 楼 65度 的回复:]
[quote=引用 3 楼 OrdinaryCoder 的回复:]

public class SerializeJsonSwitch
{
/// <summary>
/// JSON序列化
/// </summary>
public static string JsonSerializer<T>(T t)
{
var ser = new DataContractJsonSerializer(typeof(T));
var ms = new MemoryStream();
ser.WriteObject(ms, t);
string jsonString = Encoding.UTF8.GetString(ms.ToArray());
ms.Close();
return jsonString;
}

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

Json序列化反序列化了解一下

这个我知道,现在就是不会怎么把我要的数据整成Json格式,之前没有接触过这个json[/quote]
new 一个json对应的类 把你想要的json数据往对象相应的字段赋值 调用json序列化函数 传入该对象 返回的就是一个json字符串[/quote]

引用 8 楼 SuperKrait 的回复:
长度限制,贴不完了,这一堆东西还可以用webClient很简单的写出来,只是我个人一个多余的想法封装了HttpWebRequest
SuperKrait 2019-05-24
  • 打赏
  • 举报
回复
引用 10 楼 65度 的回复:
[quote=引用 8 楼 SuperKrait 的回复:] 长度限制,贴不完了,这一堆东西还可以用webClient很简单的写出来,只是我个人一个多余的想法封装了HttpWebRequest
{
    "data":[ {
	      "AUFNR": "1000370",
	      "BWART": "101",
	      "WERKS": "2000",
	      "LGORT": "6001",
	      "BLDAT": "20190522",
	      "BUDAT": "20190522",
	      "ZMBLNR": "",
	      "MENGE": "1",
	      "CHARG": "10125205",
	      "LOBM_HSDAT": "20190522",
	      "ZT03": "0001",
	      "ZT05": "09",
	      "LOBM_UDCODE": "",
	      "LOBM_VFDAT": "",
	      "ZT01": "02",
	      "ZT07": "",
	      "ZT11": "",
	      "ZT13": "",
	      "ZCP0010": ""
    }
    ,
    {
      "AUFNR": "1000370",
      "BWART": "101",
      "WERKS": "2000",
      "LGORT": "6001",
      "BLDAT": "20190522",
      "BUDAT": "20190522",
      "ZMBLNR": "",
      "MENGE": "1",
      "CHARG": "10125205",
      "LOBM_HSDAT": "20190522",
      "ZT03": "0001",
      "ZT05": "09",
      "LOBM_UDCODE": "",
      "LOBM_VFDAT": "",
      "ZT01": "02",
      "ZT07": "",
      "ZT11": "",
      "ZT13": "",
      "ZCP0010": ""
    }
    ]
}
那就简单点,这个是要求的Json格式,我现在要POST数据的格式就是这样的,我前台怎么整成这个数据发送出去?[/quote]
byte[] data = Encoding.UTF8.GetBytes(buffer.ToString());
                    using (Stream stream = request.GetRequestStream())
                    {
                        if(data != null && data.Length > 0)
                            stream.Write(data, 0, data.Length);
                        //if(dataCustom != null && dataCustom.Length > 0)
                        //    stream.Write(dataCustom, 0, dataCustom.Length);
                    }
这个写的很明显了啊,你想发送什么就发送什么啊Buffer你随意写啊
OrdinaryCoder 2019-05-24
  • 打赏
  • 举报
回复
引用 5 楼 65度 的回复:
[quote=引用 3 楼 OrdinaryCoder 的回复:]

public class SerializeJsonSwitch
{
/// <summary>
/// JSON序列化
/// </summary>
public static string JsonSerializer<T>(T t)
{
var ser = new DataContractJsonSerializer(typeof(T));
var ms = new MemoryStream();
ser.WriteObject(ms, t);
string jsonString = Encoding.UTF8.GetString(ms.ToArray());
ms.Close();
return jsonString;
}

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

Json序列化反序列化了解一下

这个我知道,现在就是不会怎么把我要的数据整成Json格式,之前没有接触过这个json[/quote]
new 一个json对应的类 把你想要的json数据往对象相应的字段赋值 调用json序列化函数 传入该对象 返回的就是一个json字符串
65度 2019-05-24
  • 打赏
  • 举报
回复
引用 8 楼 SuperKrait 的回复:
长度限制,贴不完了,这一堆东西还可以用webClient很简单的写出来,只是我个人一个多余的想法封装了HttpWebRequest
{
"data":[ {
"AUFNR": "1000370",
"BWART": "101",
"WERKS": "2000",
"LGORT": "6001",
"BLDAT": "20190522",
"BUDAT": "20190522",
"ZMBLNR": "",
"MENGE": "1",
"CHARG": "10125205",
"LOBM_HSDAT": "20190522",
"ZT03": "0001",
"ZT05": "09",
"LOBM_UDCODE": "",
"LOBM_VFDAT": "",
"ZT01": "02",
"ZT07": "",
"ZT11": "",
"ZT13": "",
"ZCP0010": ""
}
,
{
"AUFNR": "1000370",
"BWART": "101",
"WERKS": "2000",
"LGORT": "6001",
"BLDAT": "20190522",
"BUDAT": "20190522",
"ZMBLNR": "",
"MENGE": "1",
"CHARG": "10125205",
"LOBM_HSDAT": "20190522",
"ZT03": "0001",
"ZT05": "09",
"LOBM_UDCODE": "",
"LOBM_VFDAT": "",
"ZT01": "02",
"ZT07": "",
"ZT11": "",
"ZT13": "",
"ZCP0010": ""
}
]
}

那就简单点,这个是要求的Json格式,我现在要POST数据的格式就是这样的,我前台怎么整成这个数据发送出去?
stherix 2019-05-24
  • 打赏
  • 举报
回复
引用 6 楼 65度 的回复:
[quote=引用 4 楼 stherix 的回复:] nuget引用json.net ProductOrderIn model =new ProductOrderIn(); //赋值完成后 var json = JsonConvert.SerializeObject(model); var result = new WebClient().UploadString(url, json);
这个里面怎么赋值啊,里面还有个数组呢 public class ProductOrderIn { public List<OrderInDate> Indata { set; get; } }[/quote] 这要看你数据从哪里来的啊,硬编码的话 model.Indata= new List<OrderInDate>(); model.Indata.Add(new OrderInDate{AUFAR="", ZT03=,xxxx= });//这里面数据自己填 model.Indata.Add(new OrderInDate{AUFAR="", xxx=,xxxx= });
SuperKrait 2019-05-24
  • 打赏
  • 举报
回复
长度限制,贴不完了,这一堆东西还可以用webClient很简单的写出来,只是我个人一个多余的想法封装了HttpWebRequest
SuperKrait 2019-05-24
  • 打赏
  • 举报
回复
引用 2 楼 65度 的回复:
[quote=引用 1 楼 SuperKrait 的回复:] 一般json不都是解析出来用字典封装后发送咩?
我现在是要Post Josn格式的数据,这个怎么处理成Json格式的数据,不是需要建立实体类吗?[/quote] 我没太理解,如果你只是想把类转成JSON或者反过来转的话,LITJSON有自带的方法,但是post方法我用HTTPWEBREQUEST写的时候,都是封装成idictionary,然后发送的,有直接的方法
/// <summary>
        /// 创建POST方式的HTTP请求
        /// </summary>
        /// <param name="url">Post地址</param>
        /// <param name="getDataFunc">获得数据回调(循环迭代回调)</param>
        /// <param name="parameters">传参</param>
        /// <param name="timeout">超时时间(毫秒整数)</param>
        /// <param name="header">常用头</param>
        /// <param name="headerCustom">自定义头</param>
        /// <param name="dataCustom">自定义数据</param>
        /// <param name="cookies"></param>
        /// <param name="errorHandler">报错回调</param>
        /// <returns></returns>
        public void CreatePostHttpResponse(string url, 
            IDictionary<string, string> parameters,            
            NetErrorHandle errorHandler,
            int timeout, 
            IDictionary<HttpRequestHeader, string> header,
            IDictionary<string, string> headerCustom,
            //byte[] dataCustom,
            CookieCollection cookies,
            Action finishCallBack = null
            )
        {
            HttpWebRequest request = null;
            try
            {
                //如果是发送HTTPS请求  
                if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
                {
                    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
                    request = WebRequest.Create(url) as HttpWebRequest;
                    request.ProtocolVersion = HttpVersion.Version11;
                }
                else
                {
                    request = WebRequest.Create(url) as HttpWebRequest;
                }
                request.Proxy = null;
                request.Method = "POST";
                request.ServicePoint.Expect100Continue = false;
                //request.ContentType = "image/jpeg";

                //设置代理UserAgent和超时
                //request.UserAgent = userAgent;
                WebHeaderCollection tmpHeader = new WebHeaderCollection();

                request.Timeout = timeout;

                if (header != null)
                {
                    foreach (var pair in header)
                        tmpHeader.Add(pair.Key, pair.Value);
                }
                if (headerCustom != null)
                {
                    foreach (var pair in headerCustom)
                        tmpHeader.Add(pair.Key, pair.Value);
                }
                string[] keys = tmpHeader.AllKeys;
                for (int i = keys.Length - 1; i >= 0; i--)
                {
                    switch (keys[i])
                    {
                        case "Accept":
                            request.Accept = tmpHeader[i];
                            tmpHeader.Remove("Accept");
                            break;
                        case "Connection":
                            request.Connection = tmpHeader[i];
                            tmpHeader.Remove("Connection");
                            break;
                        case "Content-Length":
                            request.ContentLength = long.Parse(tmpHeader[i]);
                            tmpHeader.Remove("Content-Length");
                            break;
                        case "Content-Type":
                            request.ContentType = tmpHeader[i];
                            tmpHeader.Remove("Content-Type");
                            break;
                        case "Expect":
                            request.Expect = tmpHeader[i];
                            tmpHeader.Remove("Expect");
                            break;
                        case "Date":
                            request.Date = System.DateTime.Parse(tmpHeader[i]);
                            tmpHeader.Remove("Date");
                            break;
                        case "Host":
                            request.Host = tmpHeader[i];
                            tmpHeader.Remove("Host");
                            break;
                        case "If-Modified-Since":
                            request.IfModifiedSince = System.DateTime.Parse(tmpHeader[i]);
                            tmpHeader.Remove("If-Modified-Since");
                            break;
                        case "Range":
                            string[] rangeArr = tmpHeader[i].Split('_');
                            request.AddRange(int.Parse(rangeArr[0]), int.Parse(rangeArr[1]));
                            tmpHeader.Remove("Range");
                            break;
                        case "Referer":
                            request.Referer = tmpHeader[i];
                            tmpHeader.Remove("Referer");
                            break;
                        case "Transfer-Encoding":
                            request.TransferEncoding = tmpHeader[i];
                            tmpHeader.Remove("Transfer-Encoding");
                            break;
                        case "User-Agent":
                            request.UserAgent = tmpHeader[i];
                            tmpHeader.Remove("User-Agent");
                            break;
                    }
                }
                //request.Headers = tmpHeader;
                request.Headers.Add(tmpHeader);
                if (cookies != null)
                {
                    request.CookieContainer = new CookieContainer();
                    request.CookieContainer.Add(cookies);
                
                }

                //发送POST数据  
                if (!(parameters == null || parameters.Count == 0))
                {
                    StringBuilder buffer = new StringBuilder();
                    int i = 0;
                    foreach (string key in parameters.Keys)
                    {
                        if (i > 0)
                        {
                            buffer.AppendFormat("&{0}={1}", key, parameters[key]);
                        }
                        else
                        {
                            buffer.AppendFormat("{0}={1}", key, parameters[key]);
                            i++;
                        }
                    }
                
                    byte[] data = Encoding.UTF8.GetBytes(buffer.ToString());
                    using (Stream stream = request.GetRequestStream())
                    {
                        if(data != null && data.Length > 0)
                            stream.Write(data, 0, data.Length);
                        //if(dataCustom != null && dataCustom.Length > 0)
                        //    stream.Write(dataCustom, 0, dataCustom.Length);
                    }
                }

                HttpWebResponse reponse = null;
            
                reponse = request.GetResponse() as HttpWebResponse;
                if (reponse != null)
                {
                    //返回响应头
                    Dictionary<string, string[]> repHeaderDic = new Dictionary<string, string[]>();
                    WebHeaderCollection collection = reponse.Headers;

                    for (int i = 0; i < collection.Count; i++)
                    {
                        string key = collection.GetKey(i);
                        string[] _value = collection.GetValues(key);
                        repHeaderDic.Add(key, _value);
                    }

                    if (repHeaderFunc != null)
                    {
                        repHeaderFunc(repHeaderDic);
                    }

                    using (System.IO.Stream stream = reponse.GetResponseStream())
                    {
                        this.Length = long.Parse(repHeaderDic["Content-Length"][0]);
                        curIndex = 0;
                        byte[] buffer = new byte[20480];
                        bool isAllBack = this.Length <= memeryMaxStore ? true : false;
                        byte[] memeryData = null;
                        float curTime = ClockHelper.Instance.GetTimeSinceProjectStart();
                        float timeOutDuation = (float)timeout / 1000;
                        if (isAllBack)
                        {
                            memeryData = new byte[this.Length];
                        }
                        while (isStart && curIndex < this.Length)
                        {
                            if (stream.CanRead)
                            {
                                int count = stream.Read(buffer, 0, buffer.Length);
                                if (isAllBack)
                                {
                                    Array.Copy(buffer, 0, memeryData, curIndex, count);
                                }
                                else
                                {
                                    if (getDataFunc != null)
                                    {
                                        getDataFunc(buffer, count);
                                    }
                                }
                                curIndex += count;
                            }
                            if (ClockHelper.Instance.GetTimeSinceProjectStart() - curTime >= timeOutDuation)
                            {
                                errorHandler("存储数据超时...");
                                break;
                            }
                            Thread.Sleep(0);
                        }

                        if (isStart && isAllBack)
                        {
                            if (getDataFunc != null)
                            {
                                getDataFunc(memeryData, memeryData.Length);
                            }
          
如果是表单发送的话,得了解一下rfc协议自己封装一个HTTp的字符串写进流里面发,这个我也写过了
65度 2019-05-24
  • 打赏
  • 举报
回复
引用 4 楼 stherix 的回复:
nuget引用json.net

ProductOrderIn model =new ProductOrderIn();
//赋值完成后
var json = JsonConvert.SerializeObject(model);
var result = new WebClient().UploadString(url, json);

这个里面怎么赋值啊,里面还有个数组呢
public class ProductOrderIn
{
public List<OrderInDate> Indata { set; get; }
}
65度 2019-05-24
  • 打赏
  • 举报
回复
引用 3 楼 OrdinaryCoder 的回复:

public class SerializeJsonSwitch
{
/// <summary>
/// JSON序列化
/// </summary>
public static string JsonSerializer<T>(T t)
{
var ser = new DataContractJsonSerializer(typeof(T));
var ms = new MemoryStream();
ser.WriteObject(ms, t);
string jsonString = Encoding.UTF8.GetString(ms.ToArray());
ms.Close();
return jsonString;
}

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

Json序列化反序列化了解一下

这个我知道,现在就是不会怎么把我要的数据整成Json格式,之前没有接触过这个json
stherix 2019-05-24
  • 打赏
  • 举报
回复
nuget引用json.net ProductOrderIn model =new ProductOrderIn(); //赋值完成后 var json = JsonConvert.SerializeObject(model); var result = new WebClient().UploadString(url, json);
OrdinaryCoder 2019-05-24
  • 打赏
  • 举报
回复

public class SerializeJsonSwitch
{
/// <summary>
/// JSON序列化
/// </summary>
public static string JsonSerializer<T>(T t)
{
var ser = new DataContractJsonSerializer(typeof(T));
var ms = new MemoryStream();
ser.WriteObject(ms, t);
string jsonString = Encoding.UTF8.GetString(ms.ToArray());
ms.Close();
return jsonString;
}

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

Json序列化反序列化了解一下
65度 2019-05-24
  • 打赏
  • 举报
回复
引用 1 楼 SuperKrait 的回复:
一般json不都是解析出来用字典封装后发送咩?

我现在是要Post Josn格式的数据,这个怎么处理成Json格式的数据,不是需要建立实体类吗?
SuperKrait 2019-05-24
  • 打赏
  • 举报
回复
一般json不都是解析出来用字典封装后发送咩?

110,545

社区成员

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

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

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