在列表中选择一个列表,并为其添加一个项目以用于JSON

时间:2015-12-23 10:38:53

标签: c# json linq

我正在尝试制作一个JSON,其中有多个地址,每个地址都有自己的多个联系人。就此而言,我创作了一个课程:

public class Supplier
{
    public decimal N100 { get; set; }
    public Nullable<decimal> N101 { get; set; }
    public Nullable<decimal> N102 { get; set; }
    public string S1 { get; set; }
    public string S2 { get; set; }
    public string S3 { get; set; }
    public Nullable<System.DateTime> D1 { get; set; }
    public Nullable<System.DateTime> D2 { get; set; }
    public Nullable<System.DateTime> D3 { get; set; }

    public List<SMFAdd> contacts = new List<SMFAdd>();
}

public class SupplierRoot
{
    public List<Supplier> address = new List<Supplier>();
}

其中SMFAdd是另一个类。

我可以在列表中添加地址:

Models.SupplierRoot s = new Models.SupplierRoot();
s.address.Add(sd); // where sd is the return output from database.

但是当我尝试将相应的联系人添加到地址时:

s.address.Select(x => x.contacts.Add(sd)); 

编译器发出以下错误

  

无法从用法

中推断出类型参数方法

我怎样才能让它发挥作用?我想将JSON设为:

{
  "address": {
    "contacts": [
      {
        "N100": 6.0,
        "N101": 7.0,
        "N102": 2.0,
        "S1": "Ghulam",
        "S2": "Suppliers",
        "S3": "Sales",
        "D1": null,
        "D2": null,
        "D3": null,
      },
      {
        "N100": 7.0,
        "N101": 7.0,
        "N102": null,
        "S1": "07",
        "S2": null,
        "S3": null,
        "D1": null,
        "D2": null,
        "D3": null,
      },
      {
        "N100": 8.0,
        "N101": 7.0,
        "N102": null,
        "S1": "1010",
        "S2": null,
        "S3": null,
        "D1": null,
        "D2": null,
        "D3": null,
      }
    ],
    "N100": 0.0,
    "N101": null,
    "N102": null,
    "S1": "Main Market",
    "S2": "ISB",
    "S3": null,
    "D1": null,
    "D2": null,
    "D3": null,
  },
  "address": {
    "contacts": [
      {
        "N100": 6.0,
        "N101": 7.0,
        "N102": 2.0,
        "S1": "Ghulam",
        "S2": "Suppliers",
        "S3": "Sales",
        "D1": null,
        "D2": null,
        "D3": null,
      },
      {
        "N100": 7.0,
        "N101": 7.0,
        "N102": null,
        "S1": "07",
        "S2": null,
        "S3": null,
        "D1": null,
        "D2": null,
        "D3": null,
      },
      {
        "N100": 8.0,
        "N101": 7.0,
        "N102": null,
        "S1": "1010",
        "S2": null,
        "S3": null,
        "D1": null,
        "D2": null,
        "D3": null,
      }
    ],
    "N100": 0.0,
    "N101": null,
    "N102": null,
    "S1": "Main Market",
    "S2": "ISB",
    "S3": null,
    "D1": null,
    "D2": null,
    "D3": null,
  }
}

3 个答案:

答案 0 :(得分:1)

您正尝试通过选择操作在“联系人”中添加项目,该操作用于选择项目。您可以使用ForEach迭代每个地址并在联系人列表中添加项目。

在每个联系人中添加地址

s.address.Foreach(x => x.contacts.Add(sd)); 

现在转换为Json

var jsonString = JsonConvert.SerializeObject(s)

对于JsonConvert,您需要引用 newtonsoft 包。

答案 1 :(得分:0)

对于使用json,您可以使用Json.Net(Newtonsoft),这是一个非常简单易用的框架。包含Newtonsoft.Json后,您可以序列化这样的对象:

var myObject = WhatEverObject();
var json = JsonConvert.SerializeObject(myObject);

如果你想反序列化你的json字符串:

var myObject = JsonConvert.DeserializeObject<WhatEverObject>(json);

并添加地址:

s.address.Foreach(x => x.contacts.Add(sd)); 

答案 2 :(得分:0)

我在这里可以推断的是&#34; sd&#34;有地址和联系人列表。 SMFAdd和供应商的结构是不同的。供应商有一个联系人列表,SMFAdd包含除联系人列表之外的所有供应商。因此,您尝试添加到列表中的结构存在冲突。因此错误。

简单地

address.add(sd)和address.contact.add(sd)是不同的,因为联系人不会再次包含联系人列表但地址为