无法将类型 'string' 隐式转换为'int'



我不是C#中最好的,因为我目前仍在学习!但是,我陷入了从资产文件中分配解析的JSON值。

解析工作正常,我可以找到一条路径。但是,该值是作为对象检索的,我无法将其转换为当前JSON值的整数。

我将如何以正确的格式检索JSON值?是字符串或int。

我已经尝试了Convert.ToInt32(reader.Value)(int) reader.Value,如下所示。

但我收到错误Cannot implicitly convert type 'string' to 'int'

另外,我尝试了JsonConvert.DeserializeObject<T>(reader.Value)

给出两个错误:

  • The type or namespace name 'T' could not be found
  • Argument 1: cannot convert from 'object to 'string'

注意: customervolumes()只是完整JSON响应的Getter/setter映射类。有些值是字符串或整数。没什么特别的!

使用: http://www.newtonsoft.com/json/help/help/html/t_newtonsoft_json_jsonreader.htm
使用:http://json2csharp.com创建 custicervolumes class> class

public class DashboardActivity : Activity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        SetContentView(Resource.Layout.Dashboard);
        string  jsonResponse      = ReadFile();
        var     CustomerVolumes   = new CustomerVolumes();
        JsonTextReader reader = new JsonTextReader(new StringReader(@jsonResponse));
        while (reader.Read())
        {
            if (reader.Value != null)
            {
                if (reader.Path.Equals("customers.id.cycles.yyyy_mm.scopes.mms.volume") && !reader.Value.Equals("volume"))
                {
                    CustomerVolumes.customers.id.cycles.yyyy_mm.scopes.mms.volume = Convert.ToInt32(reader.Value);
                }
                if (reader.Path.Equals("customers.id.cycles.yyyy_mm.scopes.gprs.volume") && !reader.Value.Equals("volume"))
                {
                    CustomerVolumes.customers.id.cycles.yyyy_mm.scopes.gprs.volume = (int) reader.Value;
                }
        }
    }
    private string ReadFile()
    {
        StreamReader sr = new StreamReader(Android.App.Application.Context.Assets.Open(JSON_FILE));
        string text     = sr.ReadToEnd();
                          sr.Close();
        return text;
    }
}
public class Mms
{
    public int volume { get; set; }
}
public class Gprs
{
    public int volume { get; set; }
}
public class Voice
{
    public int volume { get; set; }
}
public class Sms
{
    public int volume { get; set; }
}
public class Scopes
{
    public Mms mms { get; set; }
    public Gprs gprs { get; set; }
    public Voice voice { get; set; }
    public Sms sms { get; set; }
}
public class YyyyMm
{
    public Scopes scopes { get; set; }
}
public class Cycles
{
    public YyyyMm yyyy_mm { get; set; }
}
public class Id
{
    public Cycles cycles { get; set; }
}
public class Customers
{
    public Id id { get; set; }
}
public class CustomerVolumes
{
    public Customers customers { get; set; }
}

在您的情况下无需使用jsonreader,因为您为完整的JSONRESPONSE的生成对象称为CustomerVolumes

要在您的方法中使用它,只需使用:

var customerVolumes = JsonConvert.DeserializeObject<CustomerVolumes>( jsonResponse );

这将为您提供CustomerVolumes的新实例,所有值正确填充。

无需解析完整的对象和正确的路径。

作为一个例子,您可以查看此.netfiddle,该.netfiddle将json对象带入C#类中。

由于我没有您正在使用的任何数据,这是一个小示例程序,可以显示它如何工作

using System;
using System.Collections.Generic;
using Newtonsoft.Json;
using System.Linq;
public class Program
{
    static string fakeJsonString = 
        @"{ ""text"": ""This is a text"", ""intValue"": 10, ""dictionary"": { ""key"": ""value"" }, ""array"": [ 10, 20, 30 ] }";

    internal class FakeObject {
        [JsonProperty("text")]
        public string Text { get;set; }
        [JsonProperty("intValue")]
        public int IntValue { get;set; }
        [JsonProperty("dictionary")]
        public Dictionary<string, string> Dictionary { get;set; }
        [JsonProperty("array")]
        public int[] IntArray { get;set; }
    }
    public static void Main()
    {
        var fakeObject = JsonConvert.DeserializeObject<FakeObject>( fakeJsonString );
        Console.WriteLine("Current value for text: "  + fakeObject.Text);
        Console.WriteLine("Current value for intValue: "  + fakeObject.IntValue);
        Console.WriteLine("Current value for Dictionary: "  + string.Join( ",", fakeObject.Dictionary.Select(kvp => """ + kvp.Key + "": "" + kvp.Value + """ ) ) );
        Console.WriteLine("Current value for IntArray: "  + string.Join( ",", fakeObject.IntArray));
    }
}

不熟悉您要做的事情,而只是值得尝试的猜测。在此网站上,它显示了jsonreader.value属性返回对象而不是字符串。也许尝试明确地做读者。如果类型正确,我看不出您的代码为什么不起作用。

至于JsonConvert.DeserializeObject<T>(reader.Value),请确保您将t交换为:

JsonConvert.DeserializeObject<String>(reader.Value)

祝你好运!

编辑:

不熟悉您要做的事情,而只是值得尝试的猜测。在此网站上,它显示了jsonreader.value属性返回对象而不是字符串。也许尝试明确地做读者。如果类型正确,我看不出您的代码为什么不起作用。

至于JsonConvert.DeserializeObject<T>(reader.Value),请确保您将t交换为:

的字符串
JsonConvert.DeserializeObject<String>(reader.Value)

祝你好运!

编辑:

while (reader.Read())
{
    if (reader.Value != null)
    {
        string rVal = (string)reader.Value
        if (reader.Path.Equals("customers.id.cycles.yyyy_mm.scopes.mms.volume") && !(rVal.toUpper() == "VOLUME"))
        {
            CustomerVolumes.customers.id.cycles.yyyy_mm.scopes.mms.volume = Convert.ToInt32(rVal);
        }
}

尝试一下?

相关内容

  • 没有找到相关文章

最新更新