Как убрать $ для результата json? - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь прочитать значение ячейки из простого листа Google

https://docs.google.com/spreadsheets/d/1opP1t_E9xfuLXBkhuyzo5j9k_xBNDx0XKb31JwLP1MM/edit?usp=sharing

, затем я опубликовал его и получил ссылку API , которая возвращает JSON , проверьте следующее https://spreadsheets.google.com/feeds/list/1opP1t_E9xfuLXBkhuyzo5j9k_xBNDx0XKb31JwLP1MM/1/public/values?alt=json

, когда я попытался сгенерировать C # классы из JSON , используя http://json2csharp.com/, Я получаю

invalid_name и $ (что не подходит для компилятора csharp)

public class Id
{
    public string __invalid_name__$t { get; set; }
}

public class Updated
{
    public DateTime __invalid_name__$t { get; set; }
}

public class Category
{
    public string scheme { get; set; }
    public string term { get; set; }
}

public class Title
{
    public string type { get; set; }
    public string __invalid_name__$t { get; set; }
}

public class Link
{
    public string rel { get; set; }
    public string type { get; set; }
    public string href { get; set; }
}

public class Name
{
    public string __invalid_name__$t { get; set; }
}

public class Email
{
    public string __invalid_name__$t { get; set; }
}

public class Author
{
    public Name name { get; set; }
    public Email email { get; set; }
}

public class OpenSearchTotalResults
{
    public string __invalid_name__$t { get; set; }
}

public class OpenSearchStartIndex
{
    public string __invalid_name__$t { get; set; }
}

public class Id2
{
    public string __invalid_name__$t { get; set; }
}

public class Updated2
{
    public DateTime __invalid_name__$t { get; set; }
}

public class Category2
{
    public string scheme { get; set; }
    public string term { get; set; }
}

public class Title2
{
    public string type { get; set; }
    public string __invalid_name__$t { get; set; }
}

public class Content
{
    public string type { get; set; }
    public string __invalid_name__$t { get; set; }
}

public class Link2
{
    public string rel { get; set; }
    public string type { get; set; }
    public string href { get; set; }
}

public class GsxName
{
    public string __invalid_name__$t { get; set; }
}

public class GsxPhonenumber
{
    public string __invalid_name__$t { get; set; }
}

public class Entry
{
    public Id2 id { get; set; }
    public Updated2 updated { get; set; }
    public List<Category2> category { get; set; }
    public Title2 title { get; set; }
    public Content content { get; set; }
    public List<Link2> link { get; set; }
    public GsxName __invalid_name__gsx$name { get; set; }
    public GsxPhonenumber __invalid_name__gsx$phonenumber { get; set; }
}

public class Feed
{
    public string xmlns { get; set; }
    public string __invalid_name__xmlns$openSearch { get; set; }
    public string __invalid_name__xmlns$gsx { get; set; }
    public Id id { get; set; }
    public Updated updated { get; set; }
    public List<Category> category { get; set; }
    public Title title { get; set; }
    public List<Link> link { get; set; }
    public List<Author> author { get; set; }
    public OpenSearchTotalResults __invalid_name__openSearch$totalResults { get; set; }
    public OpenSearchStartIndex __invalid_name__openSearch$startIndex { get; set; }
    public List<Entry> entry { get; set; }
}

public class RootObject
{
    public string version { get; set; }
    public string encoding { get; set; }
    public Feed feed { get; set; }
}

Я хочу сериализовать и десериализовать этот класс, также я хочу удалить $, что янужно сделать?

1 Ответ

0 голосов
/ 26 сентября 2018

Очевидно, что json2csharp преобразует каждый объект json в класс и буквально преобразует имена ключей в имена переменных.Поэтому, когда бы он ни находил имя ключа, начинающееся с $, он не может создать переменную ac # с этим символом, и ему предшествует имя переменной с _invalid_name_.Здесь нет ничего плохого.

Вы должны сказать, почему вы хотите удалить эту фразу invalid_name из имени переменной?Вы хотите сериализовать и десериализовать этот класс?Если это так, вы можете использовать библиотеку NewtonSoft Json и определить эти поля со знаком $ следующим образом:

[JsonProperty(PropertyName = "$t")]
public string t { get; set; }

это позволит вам сериализовать / десериализовать json doc

то же самое для имени gsx $:

[JsonProperty(PropertyName = "gsx$name")]
public string gsxname { get; set; }
...