【问题标题】:having difficulties with c# to Json使用 c# 到 Json 时遇到困难
【发布时间】:2017-05-20 04:11:39
【问题描述】:

我对 Json 很陌生,我有一个程序可以使用一些 json 数据发出 put 请求。

我需要对此进行等效处理:{ "project": { "date_closed":"2017-01-05"} }

这是我需要调整的代码..

object instructionData = new { date_closed = DateTime.Now.ToString("yyyy-MM-dd") };

var instructionString = JsonConvert.SerializeObject(instructionData);
StringContent instruction = new StringContent(instructionString, Encoding.UTF8, "application/json");

目前我似乎无法弄清楚...

我看过一些转换器,它们只是创建类。还有那些我真的不知道该怎么办..

希望有人愿意帮忙。

编辑 我正在创建一个正在发送的响应。

var response = instructions.GetPutResponse(instructions.GetCleanUpProjectsRequestUrl(projectId), instructions.GetJsonInstructions(instructionData), client);

GetPutResponse 方法:

public HttpResponseMessage GetPutResponse(string requestUrl, HttpContent httpContent, HttpClient client)
    {
        return client.PutAsync(requestUrl, httpContent).Result;
    }

【问题讨论】:

  • instructionData 是一个匿名对象 - 或者这意味着是包含在“放置”请求中的 JSON?
  • 该指令包含在 put 请求中。
  • 你能展示更多你的代码吗?这是控制器方法吗?请编辑您的问题以显示完整的方法
  • 对于如此简单的 JSON,使用类和 JSONConvert 似乎有点过头了。你不能简单地连接字符串来创建那个 JSON 吗? var json = "{\"project\": { \"date_closed\":\"" + date.ToString("yyyy-MM-dd") + "\"} }";;
  • 它是一个更大的程序的一部分,它重用了很多代码。但是插入 @Equalsk 会给我错误,无效的匿名成员类型声明符,必须使用成员分配、简单名称或成员访问来声明。

标签: c# json type-conversion


【解决方案1】:

就像上面的一个 cmets 建议使用字符串连接,这似乎是公平的方法,但是如果你不想走那条路,那么你可以使用以下 sn-p 来实现你想要的。替换下一行

object instructionData = new { date_closed = DateTime.Now.ToString("yyyy-MM-dd") };

var instructionData = new { projects = new { date_closed = DateTime.Now.ToString("yyyy-MM-dd") } };

【讨论】:

  • 它生成这个:{ projects = {{ date_closed = 2017-01-05 }} } 这似乎返回了一个错误的请求。你知道为什么它会在日期周围生成双括号吗?跨度>
  • 我不确定你在做什么不同但是序列化的输出,即指令字符串的值应该是{“project”:{“date_closed”:“2017-01-05”}}。我对其进行了测试并生成了正确的字符串。
  • 我插入了完全相同的东西,但它会生成双括号......这真的很奇怪......
【解决方案2】:
public class Project
{
    public string date_closed { get; set;}
}

public class MyClass
{
    public Project project { get; set;}
}

var obj = new MyClass();
obj.project = new Project();
obj.project.date_closed = DateTime.Now.ToString("yyyy-MM-dd");

var instructionString = JsonConvert.SerializeObject(obj);

【讨论】:

  • 这确实解决了最初的问题。虽然会希望一些不那么广泛的东西。但这是我要继续努力的。感谢解决方案^^
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-25
  • 1970-01-01
  • 2019-03-03
  • 1970-01-01
  • 2011-01-02
  • 2021-11-20
相关资源
最近更新 更多