使用子类型

时间:2016-04-13 21:29:24

标签: c# rest

如果这是REST结果:

[ {
  "sessionId" : "232e3ef6-eb80-413e-bce0-ebb167bf90d0",
  "instanceId" : "6070f583-c2aa-4a1f-8541-1d0b22e365fe",
  "clientId" : "com.whatever",
  "deviceId" : "abac87cca",
  "document" : {
    "nameOfHolder" : "SQUARE PANTS",
    "dateOfExpiry" : "161010",
    "features" : [ "DCA" ],
    "typegroups" : [ 1, 2 ]
  }
} ]

... C#类看起来是什么样的,我可以成功阅读document子部分?

目前我正在使用HttpClientContent.ReadAsAsync成功阅读,但前提是我错过了"文档"部分:

public partial class ScanListItem
{
    public string SessionId { get; set; }
    public string InstanceId { get; set; }
    public string ClientId { get; set; }
    public string DeviceId { get; set; }

    // How do I represent the "document" here?
}

我尝试过使用这样的词典:

public Dictionary<string, string> Document{ get; set; }

...一直有效,直到它试图解析&#34;功能&#34; element - 我认为因为features是一个数组(Unexpected character encountered while parsing value: [. Path '[0].document.features.

以下是我想做的事 - 这是可能的:
直接用名字代表他们,类似于:

public string DocumentNameOfHolder { get; set; }

(当我尝试这个时,该字段仍为空白)

3 个答案:

答案 0 :(得分:4)

这个怎么样?

public class Document
{
    public string NameOfHolder { get; set; }
    public string DateOfExpiry { get; set; }
    public List<string> Features { get; set; }
    public List<int> Typegroups { get; set; }
}

public class ScanListItem
{
    public string SessionId { get; set; }
    public string InstanceId { get; set; }
    public string ClientId { get; set; }
    public string DeviceId { get; set; }
   public Document document { get; set; }
}

答案 1 :(得分:1)

你真的有两种选择。

您可以使用值为对象的词典,因为它可以存储您提供的任何内容。例如

public Dictionary<string, object> Document{ get; set; }

但实际上正确的方法是使用像这样的子文档类。

public partial class ScanListItem
{
    public string SessionId { get; set; }
    public string InstanceId { get; set; }
    public string ClientId { get; set; }
    public string DeviceId { get; set; }
    public Document Document {get;set;}
}

public class Document
{
    public string NameOfHolder {get;set;}
    public List<string> Features {get;set;}
    //Other properties here. 
}

你可以在这里看到一个.net小提琴如何工作:https://dotnetfiddle.net/6IsDiN

答案 2 :(得分:0)

有许多用于处理JSON的库。其中最值得注意的是Json.NET

以下是一个关于seriliazing和反序列化来自documentation的对象的示例:

Product product = new Product();

product.Name = "Apple";
product.ExpiryDate = new DateTime(2008, 12, 28);
product.Price = 3.99M;
product.Sizes = new string[] { "Small", "Medium", "Large" };

string output = JsonConvert.SerializeObject(product);
//{
//  "Name": "Apple",
//  "ExpiryDate": "2008-12-28T00:00:00",
//  "Price": 3.99,
//  "Sizes": [
//    "Small",
//    "Medium",
//    "Large"
//  ]
//}

Product deserializedProduct = JsonConvert.DeserializeObject<Product>(output);

只要您的C#类与您要查找的内容一致,您就可以执行以下操作:

Session sess = JsonConvert.DeserializeObject<Session>(restOutputString);
Document doc = sess.Document;